簡體   English   中英

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

[英]Find sum of all values in dict of 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

我只是想知道有沒有簡單的方法可以做到這一點...

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

您也可以考慮使用pandas庫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM