Python - la somme des valeurs dans le dictionnaire
J'ai assez simple liste:
example_list = [
{'points': 400, 'gold': 2480},
{'points': 100, 'gold': 610},
{'points': 100, 'gold': 620},
{'points': 100, 'gold': 620}
]
Comment puis-je la somme de toutes or valeurs? Je suis à la recherche de nice oneliner.
Maintenant, je suis en utilisant ce code (mais ce n'est pas la meilleure solution):
total_gold = 0
for item in example_list:
total_gold += example_list["gold"]
- Vous ne devriez pas utiliser
list
comme le nom d'une variable locale - faire les ombres de l'intégré danslist
type et peut causer des problèmes. - Vous avez raison, je suis à n'utiliser que pour cet exemple.
- Dans ce cas, une belle one-liner existe, mais de façon générale, la restriction de réponses à "nice one-liners" est probablement une mauvaise idée (comme plus agréable multi-liners peuvent exister).
InformationsquelleAutor Mateusz Jagiełło | 2012-07-27
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à la mémoire consciente:
Si vous êtes très conscient du temps:
Dans la plupart des cas, suffit d'utiliser le générateur d'expression, comme l'augmentation de la performance est notable sur un très grand jeu de données/très chaud chemin d'accès du code.
Voir cette réponse pour une explication de pourquoi vous devriez éviter d'utiliser la carte.
Voir cette réponse pour certains dans le monde réel calendrier des comparaisons de compréhension de liste vs générateur d'expressions.
Si vous préférez
map
, cela marche aussi:Mais je pense que le générateur posté par g.d.d.c est nettement mieux. Cette réponse est vraiment juste pour signaler l'existence de
operator.itemgetter
._reduce = lambda fn, ar: fn( ar[0], _reduce(fn, ar[1:])) if len(ar) > 1 else ar[0]
total_gold = _reduce((lambda x, y: x + y), (lambda fn, ar: [fn(ar[i]) for i in xrange(len(ar))])( (lambda x: x["gold"]), example_list))
Je pense aussi que g.d.d.c la réponse est bonne. Cette réponse est vraiment juste pour signaler l'existence de lambda 😛