Python:将两个dicts加在一起

Kai*_*nen 3 python

Alrigt,假设我有这两个词典:

A = {(3,'x'):-2, (6,'y'):3, (8, 'b'):9}
B = {(3,'y'):4, (6,'y'):6}
Run Code Online (Sandbox Code Playgroud)

我想把它们加在一起,这样我得到一个类似于这个的字典:

C = {(3,'x'):-2,(3,'y'):4, (6,'y'):9, (8, 'b'):9}
Run Code Online (Sandbox Code Playgroud)

我试过做一个理解,为任何长度的dicts做这个.但对新手来说似乎有点困难.我处在这样的水平,我尝试这样的东西,例如:

编辑:

>>> {k:A[k]+B[d] for k in A for d in B}
{(6, 'y'): 7, (3, 'x'): 2, (8, 'b'): 13}
Run Code Online (Sandbox Code Playgroud)

由于某些原因,我得到了这么多,但它遗漏了(3,'y'):4

jte*_*ace 11

我会使用collections.Counter:

>>> A = {(3,'x'):-2, (6,'y'):3, (8, 'b'):9}
>>> B = {(3,'y'):4, (6,'y'):6}
>>> import collections
>>> C = collections.Counter(A)
>>> C.update(B)
>>> dict(C)
{(3, 'y'): 4, (8, 'b'): 9, (3, 'x'): -2, (6, 'y'): 9}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`dict()`函数将Counter对象转换为字典.`dictionary = dict(counterobject)` (2认同)

DSM*_*DSM 7

由于您使用的是Python 3,因此一种可能的方法是:

>>> A = {(3,'x'):-2, (6,'y'):3, (8, 'b'):9}
>>> B = {(3,'y'):4, (6,'y'):6}
>>> {k: A.get(k,0) + B.get(k,0) for k in A.keys() | B.keys()}
{(8, 'b'): 9, (3, 'x'): -2, (6, 'y'): 9, (3, 'y'): 4}
Run Code Online (Sandbox Code Playgroud)

在Python 3中,.keys()返回一个dict_keys对象,我们可以使用|运算符来获取两者的并集.(这就是为什么A.keys() + B.keys()不起作用.)

(我可能会使用Counter自己,FWIW.)