87 votes

Python - additionner des valeurs dans un 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 résumer tous les or valeurs ? Je cherche un bel 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"]

195voto

g.d.d.c Points 20164
sum(item['gold'] for item in myList)

27voto

Ben Burns Points 4058

Si vous avez 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, il suffit d'utiliser l'expression du générateur, car l'augmentation des performances n'est perceptible que sur un très grand ensemble de données/un chemin de code très chaud.

Véase cette réponse pour une explication de la raison pour laquelle vous devriez éviter d'utiliser map.

Véase cette réponse pour des comparaisons de temps réelles entre la compréhension de listes et les expressions de générateur.

8voto

mgilson Points 92954

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 posté par g.d.d.c est nettement meilleur. Cette réponse est vraiment juste pour souligner l'existence de operator.itemgetter .

0voto

xmduhan Points 474
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']

0voto

Golden Lion Points 985
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)

sortie

 4330

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X