求和dict的嵌套键值

时间:2015-02-05 13:44:54

标签: python python-2.7 dictionary sum list-comprehension

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

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

我想用钥匙' P1'来总结所有的价值观。和' P2'得到这样的结果:

reqResult = [80,150]

我该怎么做?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用

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

这将首先计算内在的词汇,而不是取出它们的值并将它们压缩,然后将它们全部加起来。

或者,定义自定义函数并使用它:

>>> 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]

答案 1 :(得分:0)

从您问题的标签中,您似乎正在寻找列表理解来执行此操作。通常情况下,它们有点难以阅读 - 但这里只有一个:

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]