Diciamo che ho un dizionario in cui le chiavi sono mappate a numeri interi come:
d = {'key1': 1,'key2': 14,'key3': 47}
Esiste un modo sintatticamente minimalista per restituire la somma dei valori in d
—ie 62
in questo caso?
Diciamo che ho un dizionario in cui le chiavi sono mappate a numeri interi come:
d = {'key1': 1,'key2': 14,'key3': 47}
Esiste un modo sintatticamente minimalista per restituire la somma dei valori in d
—ie 62
in questo caso?
Risposte:
Come ti aspetteresti:
sum(d.values())
Python 2.7.12
funziona anche bene consum(d.values())
d.values()
.
In Python 2 puoi evitare di creare una copia temporanea di tutti i valori utilizzando il itervalues()
metodo del dizionario, che restituisce un iteratore delle chiavi del dizionario:
sum(d.itervalues())
In Python 3 puoi semplicemente usare d.values()
perché quel metodo è stato modificato per farlo (ed è itervalues()
stato rimosso dal momento che non era più necessario).
Per semplificare la scrittura di codice indipendente dalla versione che scorre sempre sui valori delle chiavi del dizionario, può essere utile una funzione di utilità:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
Questo è essenzialmente ciò che six
fa il modulo di Benjamin Peterson .
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)
puoi farlo usando il ciclo for
Penso che sum(d.values())
sia il modo più efficiente per ottenere la somma.
Puoi anche provare la funzione di riduzione per calcolare la somma insieme a un'espressione lambda:
reduce(lambda x,y:x+y,d.values())
sum (d.values ()) - "d" -> La tua variabile del dizionario
La risposta di phihag (e simili) non funzionerà in python3.
Per Python 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Aggiornare! Ci sono lamentele sul fatto che non funziona! Allego solo uno screenshot dal mio terminale. Potrebbe esserci qualche discrepanza nelle versioni ecc.
Potresti considerare 'for loop' per questo:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
totale = 800
sum(d.values())
, poiché .values()
restituisce a List
.
È possibile ottenere un generatore di tutti i valori nel dizionario, quindi eseguirne il cast in un elenco e utilizzare la funzione sum () per ottenere la somma di tutti i valori.
Esempio:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
sum
in termini direduce
-reduce
è una forma più generale (ad essum
.min
Emax
può essere scritta in termini direduce
) e può risolvereproduct
facilmente altri problemi (ad es. ).