簡體   English   中英

求和dict的嵌套鍵值

[英]Sum nested key values of dict

這是我在Python 2.7中的示例字典:

sample = {'T1': {'P1': 20, 'P2': 100}, 'T2': {'P1': 60, 'P2': 50}}

我試圖用鍵'P1'和'P2'來總結所有值,得到這樣的結果:

reqResult = [80,150]

我該怎么做?

非常感謝。

您可以使用

>>> d = {'T1': {'P1': 20, 'P2': 100}, 'T2': {'P1': 60, 'P2': 50}}
>>> map(sum, zip(*[x.values() for x in d.values()]))
[150, 80]

這將首先計算內在的dicts,而不是取出它們的值並將它們壓縮,最后將它們全部加起來。

或者,定義自定義函數並使用它:

>>> d = {'T1': {'P1': 20, 'P2': 100}, 'T2': {'P1': 60, 'P2': 50}}
>>> def sigma(list_of_dicts):
...     result = []
...     keys = list_of_dicts[0].keys()
...     for key in keys:
...         result.append(sum(x[key] for x in list_of_dicts))
...     return result
... 
>>> print sigma(d.values())
[150, 80]

從您問題的標簽,您似乎正在尋找列表理解來做到這一點。 通常情況下,它們可能有點難以閱讀 - 但這里有一個:

from collections import Counter

sample = {'T1': {'P1': 20, 'P2': 100}, 'T2': {'P1': 60, 'P2': 50}}

reqResult = [v[1] for v in sorted(reduce(lambda c, d: (c.update(d), c)[1],
                                         sample.values(), Counter()).items())]

print reqResult  # --> [80, 150]

暫無
暫無

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

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