我的線沿線的一個嵌套的字典:嵌套字典使用不同的密鑰總結項目
{'apple': {'a': 1, 'b': 4, 'c': 2},
'orange': {'a': 4, 'c': 5},
'pear': {'a': 1, 'b': 2}}
我想要做的就是擺脫外鍵,總結內鍵的值是什麼讓我有一個新的字典,它看起來像:
{'a': 6, 'b': 6, 'c': 7}
我的線沿線的一個嵌套的字典:嵌套字典使用不同的密鑰總結項目
{'apple': {'a': 1, 'b': 4, 'c': 2},
'orange': {'a': 4, 'c': 5},
'pear': {'a': 1, 'b': 2}}
我想要做的就是擺脫外鍵,總結內鍵的值是什麼讓我有一個新的字典,它看起來像:
{'a': 6, 'b': 6, 'c': 7}
可以使用Counter類:
>>> from collections import Counter
>>> d = {'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}}
>>> sum(map(Counter, d.values()), Counter())
Counter({'c': 7, 'a': 6, 'b': 6})
from collections import defaultdict
d = defaultdict(int)
for dct in yourdict.values():
for k,v in dct.items():
d[k] += v
這個答案的主要優點是,它的作品回的python2.5。對於python2.7 +,請參閱由@DSM和@BigYellowCactus發佈的解決方案。
的Counter目的是爲了使這樣的事情很簡單:
>>> from collections import Counter
>>> d = {'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}}
>>> sum((Counter(v) for v in d.itervalues()), Counter())
Counter({'c': 7, 'a': 6, 'b': 6})
這裏是另一個collections.Counter
的解決方案,它不是一個像其他人一樣,但我認爲它更清潔:
from collections import Counter
d = {'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}}
counts = Counter()
for v in d.values():
counts.update(v)
太棒了!正是我需要的。感謝您的快速反應每個人 – user1600653