给出任意数量的字典,如何将它们全部合并在一起,以使合并的字典包含所有字典的元素以及对相似的键值求和。
例如
d1 = {a: 2, b: 3, c: 1}
d2 = {a: 3, b: 2, c: 3}
d3 = {b: 8, d: 2}
我们合并的字典如下:
{a: 5, b: 13, c: 4, d: 2}
这可以通过kwargs完成吗?我知道一个人可以做:
{**d1, **d2, **d3}
但是对于n个定义的字典可以做到吗?
答案 0 :(得分:2)
您可以使用计数器
从馆藏进口柜台
d1 = {'a': 2, 'b': 3, 'c': 1}
d2 = {'a': 3, 'b': 2, 'c': 3}
d3 = {'b': 8, 'd': 2}
list_of_dicts = [d1, d2, d3]
cnt = Counter()
for d in list_of_dicts:
cnt.update(d)
print(cnt)
Counter({'b': 13, 'a': 5, 'c': 4, 'd': 2})
答案 1 :(得分:0)
根据您对defaultdict
的评论,以下是遵循这些方针的方法。就是说,我更喜欢Counter
的答案中的@Raphael方法。
from collections import defaultdict
def mergesum(*dicts):
merged = defaultdict(int)
for k, v in (item for d in dicts for item in d.items()):
merged[k] += v
return merged
d1 = {'a': 2, 'b': 3, 'c': 1}
d2 = {'a': 3, 'b': 2, 'c': 3}
d3 = {'b': 8, 'd': 2}
result = mergesum(d1, d2, d3)
print(result)
# defaultdict(<class 'int'>, {'a': 5, 'b': 13, 'c': 4, 'd': 2})