合并两个词典,如果找到重复的键,则添加它们的值

时间:2018-01-11 07:07:48

标签: python dictionary python-3.6

我有2个python词典:

x =  {'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5}  
y =  {'bookB': 1, 'bookD': 2, 'bookF': 3, 'bookL': 4, 'bookX': 5}

我想合并上面两个字典并创建另一个字典。 我试过这段代码:

z = {**x, **y}

但在这种情况下,关键值是重写。我想要一个字典,如果有重复,添加它们的值或其他一些动作也可以像减法,乘法等那样。所以我的座右铭不是覆盖重复值,而是如果有任何重复就执行一些操作。 任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

选项1
xy转换为collections.Counter个对象,然后将它们相加(Counter支持__add__ ition。)

from collections import Counter

z = dict(Counter(x) + Counter(y))
z 
{'bookA': 1,
 'bookB': 3,
 'bookC': 3,
 'bookD': 6,
 'bookE': 5,
 'bookF': 3,
 'bookL': 4,
 'bookX': 5}

选项2
你可以用dict.pop -

写一个简洁的小词典理解
z = {k : x[k] + y.pop(k, 0) for k in x} 

现在,使用z -

中剩下的内容更新y
z.update(y)

或者,

z = {**z, **y} # python3.6

z
{'bookA': 1,
 'bookB': 3,
 'bookC': 3,
 'bookD': 6,
 'bookE': 5,
 'bookF': 3,
 'bookL': 4,
 'bookX': 5}