84

我有一个非常简单的清单:

example_list = [
    {'points': 400, 'gold': 2480},
    {'points': 100, 'gold': 610},
    {'points': 100, 'gold': 620},
    {'points': 100, 'gold': 620}
]

我怎样才能总结所有的黄金价值?我正在寻找漂亮的oneliner。

现在我正在使用这段代码(但这不是最好的解决方案):

total_gold = 0
for item in example_list:
    total_gold += example_list["gold"]
4

5 回答 5

186
sum(item['gold'] for item in myList)
于 2012-07-27T17:22:53.713 回答
25

如果你有记忆意识:

sum(item['gold'] for item in example_list)

如果你非常注重时间:

sum([item['gold'] for item in example_list])

在大多数情况下,只使用生成器表达式,因为性能提升仅在非常大的数据集/非常热的代码路径上才明显。

请参阅此答案以了解为什么应避免使用地图。

有关列表理解与生成器表达式的一些真实时间比较,请参阅此答案

于 2012-07-27T19:16:13.717 回答
8

如果您愿意map,这也可以:

 import operator
 total_gold = sum(map(operator.itemgetter('gold'),example_list))

但我认为 gddc 发布的生成器要好得多。这个答案真的只是为了指出存在operator.itemgetter

于 2012-07-27T17:23:51.057 回答
0
example_list = [
    {'points': 400, 'gold': 2480},
    {'points': 100, 'gold': 610},
    {'points': 100, 'gold': 620},
    {'points': 100, 'gold': 620}
]

result = np.sum([x['gold'] for x in example_list])


print(result)

输出

 4330
于 2022-02-25T12:07:13.093 回答
0
from collections import Counter
from functools import reduce
from operator import add

sum_dict = reduce(add, (map(Counter, example_list)))
# Counter({'points': 700, 'gold': 4330})
total_gold = sum_dict['gold']
于 2022-02-24T00:58:29.400 回答