Ответ 1
sum(item['gold'] for item in myLIst)
У меня есть довольно простой список:
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"]
sum(item['gold'] for item in myLIst)
Если вы осознаете память:
sum(item['gold'] for item in example_list)
Если вы очень заняты временем:
sum([item['gold'] for item in example_list])
В большинстве случаев просто используйте выражение генератора, так как увеличение производительности заметно только на очень большом пути к набору данных/очень горячего кода.
См. этот ответ для объяснения причин, по которым вам следует избегать использования карты.
См. этот ответ для некоторых сопоставлений времени в реальном времени по сравнению с генераторными выражениями.
Если вы предпочитаете map
, это тоже работает:
import operator
total_gold = sum(map(operator.itemgetter('gold'),example_list))
Но я думаю, что генератор, отправленный g.d.d.c, значительно лучше. Этот ответ на самом деле просто указывает на существование operator.itemgetter
.