![](/img/trans.png)
[英]Nested dictionary: sum values of same key of the dictionaries nested as a value of dictionary
[英]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
類支持加法,這將使這變得非常容易。 將其與Counter
的defaultdict
相結合,我們可以得到:
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.