首页 > 解决方案 > Python对具有多个元素的字典列表的键求和

问题描述

我的问题与这个问题有些不同。我有一个字典列表如下:

[{'Name': 'A', 'amt1':101, 'amt2':102, 'amt3':103},
 {'Name': 'B', 'amt1':201, 'amt2':202, 'amt3':203},
 {'Name': 'A', 'amt1':301, 'amt2':302, 'amt3':303},
 {'Name': 'C', 'amt1':401, 'amt2':402, 'amt3':403},
 {'Name': 'C', 'amt1':501, 'amt2':502, 'amt3':503},
 {'Name': 'A', 'amt1':601, 'amt2':602, 'amt3':603}]

我想为每个名称求和 amt 并在 dict 列表中得到以下结果:

[{'Name':'A', 'amt1':1003, 'amt2':1006, 'amt3':1009},
 {'Name':'B', 'amt1':201, 'amt2':202, 'amt3':203},
 {'Name':'C', 'amt1':902, 'amt2':904, 'amt3':906}]

标签: pythondictionary

解决方案


要将链接的答案扩展到多个键:

def sum_dicts(lst_of_dicts):
    out = {}

    for d in lst_of_dicts:
        for k in d.keys() - {"Name"}:
            out.setdefault(d["Name"], {"Name": d["Name"]}).setdefault(k, 0)
            out[d["Name"]][k] += d[k]

    return list(out.values())


print(sum_dicts(lst))

印刷:

[
 {'Name': 'A', 'amt2': 1006, 'amt1': 1003, 'amt3': 1009}, 
 {'Name': 'B', 'amt2': 202, 'amt1': 201, 'amt3': 203}, 
 {'Name': 'C', 'amt2': 904, 'amt1': 902, 'amt3': 906}
]

推荐阅读