簡體   English   中英

將具有相同鍵的嵌套字典列表的值相加

[英]Sum the values ​of a list of nested dictionaries that have the same key

我想總結具有相同鍵的嵌套字典列表。 這是列表:

[{'CAG': {'PG': 4, 'punti': 0, 'Gol fatti': 0, 'Gol subiti': 3, 'Differenza reti': -3, 'Vittorie': 0, 'Pareggi': 0, 'Sconfitte': 1}}, 
 {'ROM': {'PG': 4, 'punti': 3, 'Gol fatti': 3, 'Gol subiti': 0, 'Differenza reti': 3, 'Vittorie': 1, 'Pareggi': 0, 'Sconfitte': 0}}, 
 {'CAG': {'PG': 4, 'punti': 3, 'Gol fatti': 1, 'Gol subiti': 0, 'Differenza reti': 1, 'Vittorie': 1, 'Pareggi': 0, 'Sconfitte': 0}}, 
 {'ROM': {'PG': 4, 'punti': 0, 'Gol fatti': 0, 'Gol subiti': 1, 'Differenza reti': -1, 'Vittorie': 0, 'Pareggi': 0, 'Sconfitte': 1}}, 
 {'CAG': {'PG': 4, 'punti': 0, 'Gol fatti': 0, 'Gol subiti': 1, 'Differenza reti': -1, 'Vittorie': 0, 'Pareggi': 0, 'Sconfitte': 1}}]

我想檢查它們是否具有相同的主鍵(即'CAG'),然后對相應的值求和。

最后結果:

[{'ROM': {'PG': 8, 'punti': 3, 'Gol fatti': 3, 'Gol subiti': 1, 'Differenza reti': 2, 'Vittorie': 1, 'Pareggi': 0, 'Sconfitte': 1}}, 
 {'CAG': {'PG': 12, 'punti': 3, 'Gol fatti': 1, 'Gol subiti': 4, 'Differenza reti': -3, 'Vittorie': 1, 'Pareggi': 0, 'Sconfitte': 2}}]

Counter類支持加法,這將使這變得非常容易。 將其與Counterdefaultdict相結合,我們可以得到:

from collections import Counter, defaultdict

l = [{'CAG': {'PG': 4, 'punti': 0, 'Gol fatti': 0, 'Gol subiti': 3, 'Differenza reti': -3, 'Vittorie': 0, 'Pareggi': 0, 'Sconfitte': 1}},
 {'ROM': {'PG': 4, 'punti': 3, 'Gol fatti': 3, 'Gol subiti': 0, 'Differenza reti': 3, 'Vittorie': 1, 'Pareggi': 0, 'Sconfitte': 0}},
 {'CAG': {'PG': 4, 'punti': 3, 'Gol fatti': 1, 'Gol subiti': 0, 'Differenza reti': 1, 'Vittorie': 1, 'Pareggi': 0, 'Sconfitte': 0}},
 {'ROM': {'PG': 4, 'punti': 0, 'Gol fatti': 0, 'Gol subiti': 1, 'Differenza reti': -1, 'Vittorie': 0, 'Pareggi': 0, 'Sconfitte': 1}},
 {'CAG': {'PG': 4, 'punti': 0, 'Gol fatti': 0, 'Gol subiti': 1, 'Differenza reti': -1, 'Vittorie': 0, 'Pareggi': 0, 'Sconfitte': 1}}]

counter = defaultdict(Counter)
for d in l:
    for key, value in d.items():
        counter[key] += Counter(value)

print(counter)

使用defaultdict ,我們為每個潛在鍵('CAG'/'ROM')創建一個空Counter 然后對於我們遇到的每個鍵,我們將其Counter與值中的計數器相加。

輸出將是:

defaultdict(<class 'collections.Counter'>, {'CAG': Counter({'PG': 12, 'Gol subiti': 4, 'punti': 3, 'Sconfitte': 2, 'Gol fatti': 1, 'Vittorie': 1}), 'ROM': Counter({'PG': 8, 'punti': 3, 'Gol fatti': 3, 'Differenza reti': 2, 'Vittorie': 1, 'Gol subiti': 1, 'Sconfitte': 1})})

為了得到一個列表輸出,一個簡單的操作就可以了:

print([{key: dict(counts)} for key, counts in counter.items()])

會給:

[{'CAG': {'PG': 12, 'Gol subiti': 4, 'Sconfitte': 2, 'punti': 3, 'Gol fatti': 1, 'Vittorie': 1}}, 
 {'ROM': {'PG': 8, 'punti': 3, 'Gol fatti': 3, 'Differenza reti': 2, 'Vittorie': 1, 'Gol subiti': 1, 'Sconfitte': 1}}]

暫無
暫無

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

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