将字典的值添加到另一个字典

Rus*_*ell 2 python

我想将字典的值添加到另一个字典中.例如:

adict = {1: {'a': 13, 'b': 19, 'c': 15}, 2: {'a': 7, 'b': 2, 'c': 0}}
Run Code Online (Sandbox Code Playgroud)

如果我们加入{1: {'a': 3, 'b': 9, 'c': 23}}adict

然后adict应该是:

{1: {'a': 16, 'b': 28, 'c': 38}, 2: {'a': 7, 'b': 2, 'c': 0}}
Run Code Online (Sandbox Code Playgroud)

如果我们添加,{3: {'a': 4}}那么adict现在应该是:

{1: {'a': 16, 'b': 28, 'c': 38}, 2: {'a': 7, 'b': 2, 'c': 0}, 3: {'a': 4}}
Run Code Online (Sandbox Code Playgroud)

如果我们添加 {2: {'a': 1, 'b': 8, 'c': 27, 'd': 11}}

然后adict应该是:

{1: {'a': 16, 'b': 28, 'c': 38}, 2: {'a': 8, 'b': 10, 'c': 27, 'd': 11}, 3: {'a': 4}}
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

Mat*_*ttH 6

简单的递归函数:

>>> adict = {1: {'a': 13, 'b': 19, 'c':15}, 2: {'a': 7, 'b': 2, 'c':0}}
>>> def dict_add(a,b):
...   a = a.copy()
...   for k,v in b.items():
...     if isinstance(v,(dict,)):
...       a[k] = dict_add(a.get(k,{}),v)
...     else:
...       a[k] = a.get(k,0) + v
...   return a
...
>>> dict_add(adict,{1: {'a': 3, 'b': 9, 'c': 23}})
{1: {'a': 16, 'c': 38, 'b': 28}, 2: {'a': 7, 'c': 0, 'b': 2}}
>>> dict_add(dict_add(adict,{1: {'a': 3, 'b': 9, 'c': 23}}),{3:{'a':4}})
{1: {'a': 16, 'c': 38, 'b': 28}, 2: {'a': 7, 'c': 0, 'b': 2}, 3: {'a': 4}}
Run Code Online (Sandbox Code Playgroud)