84

私はかなり簡単なリストを持っています:

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

すべてのゴールド値を合計するにはどうすればよいですか?素敵なワンライナーを探しています。

今私はこのコードを使用しています(しかしそれは最良の解決策ではありません):

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
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 に答える
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 に答える