首页 > 解决方案 > 查找dict的dict中所有值的总和

问题描述

我有像下面这样的字典,

 {
    'AAA': 
        {'NKA': 2, 'total': 4, 'Cleared': 2, 'NRM-TY': 3, 'KLAOO': 1, 'COREI': 1, 'MFTT': 2}, 
    'DDD': 
        {'Cleared': 2, 'total': 1, 'KLAOO': 1, 'COREI': 1, 'NRM-TY': 1}, 
    'NNN': 
        {'Cleared': 1, 'total': 1, 'KLAOO': 4,}, 
    'AANN': 
        {'Cleared': 1, 'total': 1, 'NRM-TY': 2}
}

我需要得到所有键值的总和,如下所示,

{'NKA': 2, 'total': 7, 'Cleared': 6, 'NRM-TY': 6, 'KLAOO': 6, 'COREI': 2, 'MFTT': 2}

我可以使用下面的代码来实现这一点,

result = {}
for k,v in a.items():
    for p,q in v.items():
        if p in result:
            result[p] += q
        else:
            result[p] = q

我只是想知道是否有任何简单的方法可以做到这一点......

标签: pythonpython-3.xdictionary

解决方案


利用collections.Counter

前任:

from collections import Counter
data = {
    'AAA': 
        {'NKA': 2, 'total': 4, 'Cleared': 2, 'NRM-TY': 3, 'KLAOO': 1, 'COREI': 1, 'MFTT': 2}, 
    'DDD': 
        {'Cleared': 2, 'total': 1, 'KLAOO': 1, 'COREI': 1, 'NRM-TY': 1}, 
    'NNN': 
        {'Cleared': 1, 'total': 1, 'KLAOO': 4,}, 
    'AANN': 
        {'Cleared': 1, 'total': 1, 'NRM-TY': 2}
}

result = Counter()    
for _, v in data.items():
    result += Counter(v)
print(result)

输出:

Counter({'total': 7, 'NRM-TY': 6, 'Cleared': 6, 'KLAOO': 6, 'NKA': 2, 'COREI': 2, 'MFTT': 2})

推荐阅读