Załóżmy, że mam słownik, w którym klucze są odwzorowane na liczby całkowite, takie jak:
d = {'key1': 1,'key2': 14,'key3': 47}
Czy istnieje syntaktycznie minimalistyczny sposób na zwrócenie sumy wartości w d
—ie 62
w tym przypadku?
Załóżmy, że mam słownik, w którym klucze są odwzorowane na liczby całkowite, takie jak:
d = {'key1': 1,'key2': 14,'key3': 47}
Czy istnieje syntaktycznie minimalistyczny sposób na zwrócenie sumy wartości w d
—ie 62
w tym przypadku?
Odpowiedzi:
Jak można się spodziewać:
sum(d.values())
Python 2.7.12
działa również zsum(d.values())
d.values()
.
W Pythonie 2 można uniknąć tworzenia tymczasowej kopii wszystkich wartości za pomocą itervalues()
metody Dictionary, która zwraca iterator kluczy słownika:
sum(d.itervalues())
W Pythonie 3 możesz po prostu użyć, d.values()
ponieważ ta metoda została w tym celu zmieniona (i itervalues()
została usunięta, ponieważ nie była już potrzebna).
Aby ułatwić pisanie kodu niezależnego od wersji, który zawsze przechodzi przez wartości kluczy słownika, przydatna może być funkcja narzędziowa:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
To właśnie six
robi moduł Benjamina Petersona .
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)
możesz to zrobić za pomocą pętli for
Uważam, że sum(d.values())
jest to najbardziej skuteczny sposób na uzyskanie sumy.
Możesz także wypróbować funkcję zmniejszania, aby obliczyć sumę wraz z wyrażeniem lambda:
reduce(lambda x,y:x+y,d.values())
sum (d.values ()) - "d" -> Twój słownik Zmienna
Odpowiedź phihag (i podobne) nie będzie działać w python3.
Dla python 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Aktualizacja! Narzekają, że to nie działa! Właśnie dołączam zrzut ekranu z mojego terminala. Może występować niedopasowanie w wersjach itp.
Możesz rozważyć „pętlę for”:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
ogółem = 800
sum(d.values())
, ponieważ .values()
zwraca a List
.
Możesz pobrać generator wszystkich wartości ze słownika, a następnie rzucić go na listę i użyć funkcji sum (), aby uzyskać sumę wszystkich wartości.
Przykład:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
sum
się w kategoriachreduce
-reduce
jest bardziej powszechną formą (npsum
,min
imax
mogą być w całości napisany w kategoriachreduce
) i może rozwiązać inne problemy (npproduct
) łatwo.