Jak zsumować wszystkie wartości w słowniku?

Powiedzmy, że mam słownik, w którym klucze mapują do liczb całkowitych takich jak:

d = {'key1': 1,'key2': 14,'key3': 47}

Czy istnieje składniowo minimalistyczny sposób na zwrócenie sumy wartości w d - tj. 62 w tym przypadku?

Author: martineau, 2011-02-02

10 answers

Jak można się spodziewać:

sum(d.values())
 536
Author: phihag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-23 20:51:02

W Pythonie 2 można uniknąć tworzenia tymczasowych kopii wszystkich wartości za pomocą metody słownika itervalues(), 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 zmieniona, aby to zrobić (a {[2] } została usunięta, ponieważ nie była już potrzebna).

Aby ułatwić pisanie kodu niezależnego od wersji, który zawsze iteruje nad wartościami kluczy słownika, Funkcja użytkowa może być pomocny:

import sys

def itervalues(d):
    return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())

sum(itervalues(d))

To jest zasadniczo to, co Benjamin Peterson six Moduł tak.

 69
Author: martineau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-21 07:20:32

Oczywiście, że jest. Oto sposób na zsumowanie wartości słownika.

>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62
 16
Author: vz0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-16 19:05:57
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)

Możesz to zrobić używając pętli for

 6
Author: Kalyan Pendyala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-12 16:32:14

Wydaje mi się, że to najskuteczniejszy sposób na zdobycie sumy.

Możesz również spróbować funkcji reduce, aby obliczyć sumę razem z wyrażeniem lambda:

reduce(lambda x,y:x+y,d.values())
 3
Author: Pratyush Raizada,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-08 05:38:21

Sum (d. values ()) - "d" -> twoja zmienna słownikowa

 2
Author: Behlul Valiyev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-08 08:35:36

ODPOWIEDŹ Phihaga (i podobne) nie będzie działać w python3.

Dla Pythona 3:

d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))

Update! Są skargi, że to nie działa! Po prostu dołączam zrzut ekranu z mojego terminala. Może być jakaś niedopasowanie w wersjach itp.

Tutaj wpisz opis obrazka

 1
Author: Reza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-08 15:26:38

Możesz rozważyć 'for loop' dla tego:

  d = {'data': 100, 'data2': 200, 'data3': 500}
  total = 0
  for i in d.values():
        total += i

Razem = 800

 0
Author: Rahul Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-09 03:51:17

Użyj sum (), aby zsumować wartości w słowniku.

Zadzwoń do dict.values() zwraca wartości słownika dict. Użyj sum (values), aby zwrócić sumę wartości z poprzedniego kroku.
d = {'key1':1,'key2':14,'key3':47}
values = d.values()
#Return values of a dictionary    
total = sum(values)
print(total)
 0
Author: Tamil Selvan S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-24 04:11:20

Możesz uzyskać generator wszystkich wartości w słowniku, a następnie wrzucić go do listy 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()))
 -2
Author: user12988654,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-04 23:16:58