如何合并任意数量的词典

时间:2019-08-01 17:52:27

标签: python python-3.x dictionary

给出任意数量的字典,如何将它们全部合并在一起,以使合并的字典包含所有字典的元素以及对相似的键值求和。

例如

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个定义的字典可以做到吗?

2 个答案:

答案 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})