2

我在这里彻底搜索了代码来总结字典中的所有值,但它们并没有真正起作用。

hostel = {
    "Berlin": [18.0, 18.0],
    "Hamburg": [17.65, 17.65],
    "Cochem": [30],
    "Munich": [18.0, 18.0],
    "Salzburg": [18.0, 18.0],
    "Vienna": [19.0, 19.0, 19.0, 19.0],
    "Budapest": [18.0, 18.0]
}

我尝试了 sum(hostel.values()) 和 sum(d.itervalues()),但出现了以下消息:

回溯(最后一次调用):文件“”,第 16 行,类型错误:+ 的不支持的操作数类型:'int' 和 'list'

我的python版本在3之前。我可以很容易地写

sum(hostel["Berlin"]) + sum(hostel["Hamburg"]) + .....

将所有内容加起来,但这看起来很愚蠢。

任何帮助表示赞赏!

4

3 回答 3

3

这个怎么样:

>>> sum(sum(x) for x in hostel.itervalues())
285.3

(sum(x) for x in hostel.itervalues())返回一个包含所有列表总和的生成器表达式:

>>> gen = (sum(x) for x in hostel.itervalues())
>>> gen
<generator object <genexpr> at 0xa51e644>

本篇内容genexp

>>> list(gen)
[36.0, 36.0, 35.3, 36.0, 36.0, 30, 76.0]

现在我们将该 genexp 传递给 sum ,它将汇总所有这些数字:

#due to list call above the generator got consumed, so we've to create a new generator again
>>> gen = (sum(x) for x in hostel.itervalues())
>>> sum(gen)
285.3
于 2013-06-28T20:11:36.387 回答
2
>>> from itertools import chain
>>> sum(chain.from_iterable(hostel.itervalues()))
285.3
于 2013-06-28T20:12:39.930 回答
1

尝试这个:

sum([sum(x) for x in hostel.values()])

于 2013-06-28T20:11:36.290 回答