W Pythonie 2 można uniknąć tymczasową kopię wszystkich wartości za pomocą metody itervalues()
słownika, która zwraca iterator kluczy słownika to:
sum(d.itervalues())
W Pythonie 3 można po prostu użyj d.values()
, ponieważ ta metoda została zmieniona, aby to zrobić (i usunięto itervalues()
, ponieważ nie była już potrzebna).
Aby łatwiej napisać wersji niezależnej kod, który zawsze wykonuje iteracje nad wartościami kluczy słownika użytkownika, funkcja narzędzie może być pomocne:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
Jest to w zasadzie to, co robi moduł Benjamin Petersona six
.
Dla przyjemności: zaimplementuj 'sum' siebie w kategoriach [' reduce'] (http://docs.python.org/library/functions.html) - 'reduce' jest bardziej ogólną formą (np.' ' sum', 'min' i' max' mogą być napisane w kategoriach 'reduce') i mogą łatwo rozwiązać inne problemy (np.' product'). –
A co z powiedzeniem Guido - myślę, że pamiętam to poprawnie - że redukcja odchodzi? Jestem z tobą. Dlaczego warto usunąć to z języka? – octopusgrabbus