假设我有以下字典:
dict1 = {'a': 10, 'b': 8, 'c':3}
dict2 = {'c': 4}
dict3 = {'e':9, 'a':3}
我正试图以一种方式合并它们,使新的(组合)字典包含所有键,并将相同键的所有值添加在一起。例如,在本例中,我想要的输出如下:
dict = {'a': 13, 'b': 8, 'c':7, 'e':9}
看起来update()方法不起作用,因为一些值被覆盖了。我也尝试了ChainMaps,遇到了同样的问题。如何合并多个字典并添加相同键的值?非常感谢:)
这里有一个字典推导来实现使用itertools.chain.from_iterable()
和sum()
。在这里,我从所有三个字典中创建键的set
。然后我在字典推导式中迭代这个集合,以获得键的值的总和。
>>> from itertools import chain
>>> dict1 = {'a': 10, 'b': 8, 'c':3}
>>> dict2 = {'c': 4}
>>> dict3 = {'e':9, 'a':3}
>>> my_dicts = dict1, dict2, dict3
>>> {k: sum(dd.get(k, 0) for dd in my_dicts) for k in set(chain.from_iterable(d.keys() for d in my_dicts))}
{'a': 13, 'e': 9, 'b': 8, 'c': 7}
下面的代码应该可以达到这个效果:
dict1 = {'a': 10, 'b': 8, 'c':3}
dict2 = {'c': 4}
dict3 = {'e':9, 'a':3}
multiple_dict = [dict1, dict2, dict3]
final_dict = {}
for dict in multiple_dict:
for key, value in dict.items():
if key in final_dict:
final_dict[key] += value
else:
final_dict[key] = value
print(final_dict)