首页 > 解决方案 > 如何在 Python 中合并和求和字典值

问题描述

我想用相同的键总结多个 Python 字典中的所有值,并保持其他值不变,就好像它们有不同的键一样。输入字典看起来像这样:

dict1 = {'A':{'a':1, 'b':2, 'c':0}, 'B':{'a':3, 'b':0, 'c':0}}
dict2 = {'A':{'a':3, 'c':1, 'd':5}, 'B':{'a':2, 'b':0, 'c':1}, 'C':{'a':1, 'b':2, 'c':1}}

输出:

dict3 = {'A':{'a':4, 'b':2, 'c':1, 'd':5}, 'B':{'a':5, 'b':0, 'c':1}, 'C':{'a':1, 'b':2, 'c':1}}

有没有办法只使用标准库来实现这个结果?这也应该适用于 2 个以上的字典。

标签: pythonpython-3.xdictionary

解决方案


非常依赖结构,但是类似于...

dicts = [
    {'A':{'a':1, 'b':2, 'c':0}, 'B':{'a':3, 'b':0, 'c':0}},
    {'A':{'a':3, 'c':1, 'd':5}, 'B':{'a':2, 'b':0, 'c':1}, 'C':{'a':1, 'b':2, 'c':1}}
]

odict = {}
for d in dicts:
    for dk in d.keys():
        if dk not in odict:
            odict[dk] = {}
        for inner_dk in d[dk].keys():
            if inner_dk not in odict[dk]:
                odict[dk][inner_dk] = d[dk][inner_dk]
            else:
                odict[dk][inner_dk] += d[dk][inner_dk]

print(odict)

推荐阅读