338 votes

Somme de toutes les valeurs dans un dict Python

Je suis novice en Python. Disons que j'ai un dictionnaire dans lequel les clés correspondent à des nombres entiers, par exemple :

d = {'key1':1,'key2':14,'key3':47}

Existe-t-il un moyen syntaxiquement minimaliste de renvoyer la somme des valeurs de d, c'est-à-dire 62 dans ce cas.

Merci

2 votes

Juste pour le plaisir : mettre en œuvre sum vous-même en termes de reduce -- reduce est une forme plus générale (par ex. sum , min y max peuvent tous être écrits en termes de reduce ) et peut résoudre d'autres problèmes (par ex. product ) facilement.

1 votes

Qu'en est-il de la déclaration de Guido - je pense que je m'en souviens bien - que réduire va disparaître ? Je suis d'accord avec vous. Pourquoi le supprimer du langage ?

668voto

phihag Points 89765

Comme on peut s'y attendre :

sum(d.values())

En Python<3, vous pouvez utiliser itervalues à la place (qui ne construit pas de liste temporaire).

1 votes

Bien, Python 2.7.12 fonctionne également bien avec sum(d.values())

7 votes

@LancelotHolmes Oui, mais cela construit une liste en mémoire, et peut donc être plus lent/proche des limites de ressources pour les grands dictionnaires. Ainsi, cette réponse dit "vous mai que vous voulez utiliser" au lieu de "vous doit utiliser" lors de la discussion sur Python 2.

0 votes

Joli ! Je l'ai cherché juste parce que je savais qu'il y aurait quelque chose comme ça. Ce n'est pas que ça demande trop de travail d'écrire une boucle for idiote et morte ;)

71voto

martineau Points 21665

Vous pouvez éviter de faire une copie temporaire de toutes les valeurs en utilisant la fonction itervalues() méthode du dictionnaire.

sum(d.itervalues())

5 votes

Oui, bien que cela ne s'applique pas à python 3.

20voto

vz0 Points 11605

Bien sûr que oui. Voici une façon d'additionner les valeurs d'un dictionnaire.

>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62

7voto

Kalyan Pendyala Points 71
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)

vous pouvez le faire en utilisant la boucle for

5voto

Je sens sum(d.values()) est le moyen le plus efficace d'obtenir la somme.

Vous pouvez également essayer la fonction reduce pour calculer la somme avec une expression lambda :

reduce(lambda x,y:x+y,d.values())

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