以Python方式对字典中的值求和
假设我们有一个字典,我们叫它 mydict
。
{'Plekhg2': {'Bcells': '233.55', 'DendriticCells': '190.12'},
'Barxxxx': {'Bcells': '132.11', 'DendriticCells': '92.01'}, }
我想把每个键对应的内层字典里的值加起来,最后得到:
{'Plekhg2': 423.67, # 233.55 + 190.12
'Barxxxx': 224.12} # 132.11 + 92.01
我该怎么用Python来做到这一点呢?
3 个回答
0
在这里补充一下关于Python 3的内容:
In [134]:
{k:sum(float(x) for x in v.values()) for k, v in my_dict.items()}
Out[134]:
{'Barxxxx': 224.12, 'Plekhg2': 423.67}
4
可以使用字典推导式和 sum
函数来计算,因为这些值是字符串,所以你需要先用 float
把它们转换成浮点数。
>>> {k:sum(float(x) for x in v.itervalues()) for k, v in d.iteritems()}
{'Plekhg2': 423.67, 'Barxxxx': 224.12}
在 Python 3 中,使用 .items()
和 .values()
,而不是 .iter(values|items)
。
5
通过字典推导式,可以使用 sum()
来计算嵌套字典中的值的总和;在 Python 2.6 或更早的版本中,会使用 dict()
和生成器表达式来实现:
# Python 2.7
{k: sum(float(f) for f in v.itervalues()) for k, v in mydict.iteritems()}
# Python 3.x
{k: sum(map(float, v.values())) for k, v in mydict.items()}
# Python 2.6 and before
dict((k, sum(float(f) for f in v.values())) for k, v in mydict.iteritems())
不过,你可能一开始就想存储浮点数值。
示例:
>>> mydict ={'Plekhg2': {'Bcells': '233.55', 'DendriticCells': '190.12'},
... 'Barxxxx': {'Bcells': '132.11', 'DendriticCells': '92.01'}, }
>>> {k: sum(float(f) for f in v.itervalues()) for k, v in mydict.iteritems()}
{'Plekhg2': 423.67, 'Barxxxx': 224.12}