【问题标题】:How do I add values (list) of a list of dictionaries if their key is same?如果字典的键相同,如何添加字典列表的值(列表)?
【发布时间】:2021-06-24 12:52:04
【问题描述】:

我有一个字典列表,

_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]
    }

我不知道从哪里开始以及遵循什么方法,您能帮我获得所需的输出吗? 谢谢

【问题讨论】:

标签: python python-3.x list dictionary


【解决方案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)

【讨论】:

    【解决方案2】:

    这是一个使用 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]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 2013-09-28
      • 2018-09-28
      • 1970-01-01
      • 2020-04-09
      • 2019-09-01
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多