如何对包含多个元素字符串的字典进行值求和?

4
我正在尝试对一个以字符串为键,以列表为值的字典进行求和。
标准的sum(d.values())方法不可行。
d= {'a': [6,7,8], 'b':[30,-3, 5000,] 'c':[200.6], 'd':[2,2,2,2,2,2,2]}

当我使用 sum(d.values()) 的时候,会得到如下结果:

TypeError: unsupported operand type(s) for +: 'int' and 'list'

你是想对每个键的列表求和,还是对整个字典求和? - MatsLindh
只需为字典的总数而不是每个键的总数。 - guyinclass
7个回答

4
您可以像这样在字典的值上使用summap
>>> sum(map(sum, d.values()))
5262.6

2

最好的方法是创建一个生成器,它将每个数组的总和相加,并最终找到生成器中值的总和。

或者如果您只想查看代码。

sum(sum(a) for a in d.values())

将每个数组的总和相加,并最终找到生成器中值的总和。

如果您只希望查看代码,请使用上面的代码。


1
你可以像这个问题中那样解压d.values()返回的列表。
sum(y for x in d.values() for y in x)

1
您可以对每个子列表的sum()求和:

sum()sum()

sum(sum(x) for x in d.values())

或者如果您不介意导入一个库:

import itertools as it
sum(it.chain(*d.values()))

1

已经有很好的解决方案了,但这是另一种方法

sum(sum(a) for a in d.values())

或者是 sum(sum(a) for a in d.values()),我非常喜欢这个答案,谢谢你唤起了我的记忆。 - Deepstop

1
一种使用 itertools.chain 的版本:

from itertools import chain

d= {'a': [6,7,8], 'b':[30,-3, 5000], 'c':[200.6], 'd':[2,2,2,2,2,2,2]}

print(sum(chain(*d.values())))

输出:

5262.6

1

其中一种最短的方法:

sum( sum(d.values(), [] ) )

输出

5262.6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接