通过对相同键的值求和来合并字典列表

时间:2019-05-03 07:48:56

标签: python list dictionary list-comprehension

如何在具有名称和值对的列表中添加多个字典,例如:

dict1 = [{'name':'A','value':6}, {'name':'B', 'value':5}]

dict2 = [{'name':'A', 'value':10}, {'name':'C', 'value':12}]

将输出提供为:

dict3 = [{'name':'A', 'value':16}, {'name':'B', 'value':5}, {'name':'C', 'value':12}]

词典中的名称不是固定的,因此名称字段中的随机值是可能的。

3 个答案:

答案 0 :(得分:2)

如果要对每个词典中的唯一'name'的所有值求和,请尝试以下操作:

names = set([k['name'] for k in dict1+dict2])
dict3 = []
for name in names:
    temp_val = []
    for dict_ in dict1+dict2:
        if dict_['name'] == name:
            temp_val.append(dict_['value'])
    dict3.append({'name': name, 'value' : sum(temp_val)})

输出

[{'name': 'A', 'value': 16}, {'name': 'B', 'value': 5}, {'name': 'C', 'value': 12}]

答案 1 :(得分:1)

使用collections.defaultdict

res = defaultdict(int)
for d in dict1+dict2:
    res[d['name']] += d['value']
[{'name': k, 'value':v} for k,v in res.items()]

输出:

[{'name': 'B', 'value': 5},
 {'name': 'C', 'value': 12},
 {'name': 'A', 'value': 16}]

答案 2 :(得分:0)

您所拥有的是一个字典列表,每个字典都有一个键,您可以像这样使数据结构更简洁

dict1 = {'A' :6 , 'B' :5 }
dict2 = { 'A':10 , 'C' : 12 }

之后,您可以使用Counter来简化添加操作

from collections import Counter

dict1 = {'A' :6 , 'B' :5 }
dict2 = { 'A':10 , 'C' : 12 }

#Add the two counters and get the result
dict3 = Counter(dict1) + Counter(dict2)
print(dict(dict3))

输出将为

{'A': 16, 'B': 5, 'C': 12}