如何在具有名称和值对的列表中添加多个字典,例如:
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}]
词典中的名称不是固定的,因此名称字段中的随机值是可能的。
答案 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}