在字典中找到所有值的总和

时间:2019-07-23 09:29:13

标签: python python-3.x dictionary

我有如下字典,

 {
    '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

我只是想知道有没有简单的方法可以做同样的事情...

3 个答案:

答案 0 :(得分:3)

使用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})

答案 1 :(得分:1)

您还可以考虑使用熊猫库:

import pandas as pd

pd.DataFrame(your_dict).sum(axis=1)

您得到:

COREI      2.0
Cleared    6.0
KLAOO      6.0
MFTT       2.0
NKA        2.0
NRM-TY     6.0
total      7.0

答案 2 :(得分:0)

使用foreach (object o in question.Options) { foreach (object ob in o) { Console.WriteLine(ob.ToString()); } } 的另一种方法:

defaultdict