以Python方式对字典中的值求和

2 投票
3 回答
1313 浏览
提问于 2025-04-17 21:56

假设我们有一个字典,我们叫它 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}

撰写回答