web-dev-qa-db-fra.com

Python - somme des valeurs dans le dictionnaire

J'ai une liste assez simple:

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

Comment puis-je additionner toutes les valeurs or? Je cherche Nice oneliner.

Maintenant j'utilise ce code (mais ce n'est pas la meilleure solution):

total_gold = 0
for item in example_list:
    total_gold += example_list["gold"]
51
Mateusz Jagiełło
sum(item['gold'] for item in myLIst)
126
g.d.d.c

Si vous êtes conscient de la mémoire:

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

Si vous êtes extrêmement soucieux du temps:

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

Dans la plupart des cas, utilisez simplement l'expression du générateur, car l'augmentation des performances n'est perceptible que sur un très grand ensemble de données/chemin de code très chaud.

Voir cette réponse pour une explication des raisons pour lesquelles vous devriez éviter d'utiliser la carte.

Voir cette réponse pour quelques comparaisons temporelles réelles de la compréhension de liste par rapport aux expressions génératrices.

11
Ben Burns

Si vous préférez map, cela fonctionne aussi:

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

Mais je pense que le générateur publié par g.d.d.c est nettement meilleur. Cette réponse est vraiment juste pour souligner l'existence de operator.itemgetter.

3
mgilson