如果字典的键相同,如何添加字典列表的值(列表)?

时间:2021-06-24 12:52:04

标签: python python-3.x list dictionary

我有一个字典列表,

_list = [
    {"a": [1, 20, 20, 40], "b": [0, 14, 14, 28]},
    {"a": [2, 20, 20, 40], "b": [2, 14, 14, 28]},
    {"c": [1, 20, 20, 40], "d": [0, 14, 14, 28]},
]

我想合并这些字典并得到一个单独的字典,如果键相同,我希望它们的列表值被合并,我希望最终结果是这样的:

_dict = {
    "a": [3, 40, 40, 80], 
    "b": [2, 28, 28, 56], 
    "c": [1, 20, 20, 40], 
    "d": [0, 14, 14, 28]
    }

我不知道从哪里开始以及遵循什么方法,你能帮我得到想要的输出吗? 谢谢

2 个答案:

答案 0 :(得分:1)

这是一个基本的解决方案,不是最有效但有效的:

_list = [
  {"a": [1, 20, 20, 40], "b": [0, 14, 14, 28]},
  {"a": [2, 20, 20, 40], "b": [2, 14, 14, 28]},
  {"c": [1, 20, 20, 40], "d": [0, 14, 14, 28]},
]


_dict = {}

for dict_item in _list:
  for key, value in dict_item.items():
    if key in _dict:
      val = [a + b for a, b in zip(_dict[key], value)]
      _dict[key] = val
    else:
      _dict[key] = value

print(_dict)

答案 1 :(得分:0)

这是 Pandas 的解决方案:

import pandas as pd

m=[{k:np.array(v) for k,v in i.items()} for i in _list]
df=pd.DataFrame(m)
df=df.fillna(0)
_dict = {i:list(sum(df[i])) for i in df.columns}

print(_dict)

输出:

{'a': [3, 40, 40, 80], 'b': [2, 28, 28, 56], 'c': [1, 20, 20, 40], 'd': [0, 14, 14, 28]}