擅长:python、mysql、java
<p>稍微“优雅点”:</p>
<pre><code>uniondict = defaultdict(lambda:defaultdict(list))
for k1, v1 in dict1.items() + dict2.items():
for k2, v2 in v1.items():
uniondict[k1][k2] += v2
</code></pre>
<p>要获得更节省内存的解决方案:</p>
^{pr2}$
<p>这将使用迭代器来防止在内存中创建临时列表</p>
<p><a href="http://docs.python.org/library/itertools.html#itertools.chain" rel="noreferrer">itertools.chain docs</a></p>
<hr/>
<p>对于后代来说,这里有一个通用函数,它将合并嵌套的dictionary对象(defaultdict或no),其中第二层值支持<code>+</code>运算符。(列表、整数、集合等):</p>
<pre><code>from collections import defaultdict
from itertools import chain
def merge_nested_dicts(dict_list):
uniondict = defaultdict(lambda:defaultdict(list))
for k1, v1 in chain(*[d.iteritems() for d in dict_list]):
for k2, v2 in v1.iteritems():
uniondict[k1][k2] += v2
return uniondict
</code></pre>