在python中添加两个字典并从另一个字典中减去结果

在python中添加两个字典并从另一个字典中减去结果,python,Python,我有三本字典: X = {'a':2, 'b':3,'e':4} Y = {'c':3, 'b':4,'a':5, 'd':7} Z = {'c':8, 'b':7,'a':9, 'e':10,'f':10} 如果X和Y元素在两个DICT中都存在,我想将它们相加,然后从z中减去它们,即z-X+Y 我该怎么做 预期结果: res = {'a':2,'b':0,'c':5,'d':7,'e':6,'f':10} 我尝试的是: from collections import Counter x

我有三本字典:

X = {'a':2, 'b':3,'e':4}

Y = {'c':3, 'b':4,'a':5, 'd':7}

Z = {'c':8, 'b':7,'a':9, 'e':10,'f':10}
如果X和Y元素在两个DICT中都存在,我想将它们相加,然后从z中减去它们,即
z-X+Y

我该怎么做

预期结果:

res = {'a':2,'b':0,'c':5,'d':7,'e':6,'f':10}
我尝试的是:

from collections import Counter
xy = Counter(X) + Counter(Y)
res = Counter(Z) - xy
其中返回:

Counter({'c': 5, 'a': 2, 'e': 6, 'f': 10})

正如您所看到的,
b
d
在我的尝试中丢失了

您的预期结果实际上是一个集合对称差异的运算,但是由于
集合。计数器不支持这样的运算,您可以用以下方法模拟它:

xy = Counter(X) + Counter(Y)
z = Counter(Z)
res = z - xy | xy - z
res
变成:

Counter({'f': 10, 'd': 7, 'e': 6, 'c': 5, 'a': 2})
但是,如果您确实需要值为
0
的键,而
计数器将对其输出隐藏该值,则必须通过3个dict的键的并集进行迭代:

{k: res.get(k, 0) for k in {*X, *Y, *Z}}
这将返回:

{'a': 2, 'd': 7, 'e': 6, 'b': 0, 'f': 10, 'c': 5}

您说过要从
Z
中减去
X+Y
,但您预期的结果是
'd':7
,而不是
'd':-7
;这是打字错误,还是你的解释(或我)遗漏了什么?