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 62w 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 62w tym przypadku?
Odpowiedzi:
Jak można się spodziewać:
sum(d.values())
Python 2.7.12dział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 sixrobi 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()))
sumsię w kategoriachreduce-reducejest bardziej powszechną formą (npsum,minimaxmogą być w całości napisany w kategoriachreduce) i może rozwiązać inne problemy (npproduct) łatwo.