Disons que j'ai un dictionnaire dans lequel les clés correspondent à des entiers comme:
d = {'key1': 1,'key2': 14,'key3': 47}
Existe-t-il une manière syntaxiquement minimaliste de renvoyer la somme des valeurs dans d
—ie 62
dans ce cas?
Disons que j'ai un dictionnaire dans lequel les clés correspondent à des entiers comme:
d = {'key1': 1,'key2': 14,'key3': 47}
Existe-t-il une manière syntaxiquement minimaliste de renvoyer la somme des valeurs dans d
—ie 62
dans ce cas?
Réponses:
Comme vous vous en doutez:
sum(d.values())
Python 2.7.12
fonctionne aussi bien avecsum(d.values())
d.values()
.
Dans Python 2, vous pouvez éviter de faire une copie temporaire de toutes les valeurs en utilisant la itervalues()
méthode du dictionnaire, qui renvoie un itérateur des clés du dictionnaire:
sum(d.itervalues())
Dans Python 3, vous pouvez simplement l'utiliser d.values()
parce que cette méthode a été modifiée pour cela (et a itervalues()
été supprimée car elle n'était plus nécessaire).
Pour faciliter l'écriture de code indépendant de la version qui itère toujours sur les valeurs des clés du dictionnaire, une fonction utilitaire peut être utile:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
C'est essentiellement ce que fait le six
module de Benjamin Peterson .
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
Je ressens sum(d.values())
c'est le moyen le plus efficace pour obtenir la somme.
Vous pouvez également essayer la fonction de réduction pour calculer la somme avec une expression lambda:
reduce(lambda x,y:x+y,d.values())
sum (d.values ()) - "d" -> Votre dictionnaire Variable
la réponse de phihag (et les réponses similaires) ne fonctionnera pas en python3.
Pour python 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Mettre à jour! On se plaint que cela ne fonctionne pas! Je joins simplement une capture d'écran de mon terminal. Il pourrait y avoir un décalage dans les versions, etc.
Vous pouvez envisager `` pour la boucle '' pour cela:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
total = 800
sum(d.values())
, puisque .values()
renvoie a List
.
Vous pouvez obtenir un générateur de toutes les valeurs du dictionnaire, puis le convertir en liste et utiliser la fonction sum () pour obtenir la somme de toutes les valeurs.
Exemple:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
sum
vous implémenter en termes dereduce
-reduce
est une forme plus générale (par exemplesum
,min
etmax
peut être écrite en termes dereduce
) et peut résoudre d'autres problèmes (par exempleproduct
) facilement.