Digamos que eu tenho um dicionário no qual as chaves são mapeadas para números inteiros como:
d = {'key1': 1,'key2': 14,'key3': 47}
Existe uma maneira sintaticamente minimalista de retornar a soma dos valores em d
-ie 62
, neste caso?
Digamos que eu tenho um dicionário no qual as chaves são mapeadas para números inteiros como:
d = {'key1': 1,'key2': 14,'key3': 47}
Existe uma maneira sintaticamente minimalista de retornar a soma dos valores em d
-ie 62
, neste caso?
Respostas:
Como seria de esperar:
sum(d.values())
Python 2.7.12
também funciona bem comsum(d.values())
d.values()
.
No Python 2, você pode evitar fazer uma cópia temporária de todos os valores usando o itervalues()
método dictionary, que retorna um iterador das chaves do dicionário:
sum(d.itervalues())
No Python 3, você pode simplesmente usar d.values()
porque esse método foi alterado para fazer isso (e itervalues()
foi removido porque não era mais necessário).
Para facilitar a gravação de código independente da versão, que sempre repete os valores das chaves do dicionário, uma função de utilitário pode ser útil:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
Isso é essencialmente o que o six
módulo de Benjamin Peterson faz.
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)
você pode fazer isso usando o loop for
Eu sinto que sum(d.values())
é a maneira mais eficiente de obter a soma.
Você também pode tentar a função reduzir para calcular a soma junto com uma expressão lambda:
reduce(lambda x,y:x+y,d.values())
sum (d.values ()) - "d" -> Seu dicionário Variável
A resposta de phihag (e similares) não funcionará em python3.
Para python 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Atualizar! Há queixas de que não funciona! Acabei de anexar uma captura de tela do meu terminal. Pode haver alguma incompatibilidade nas versões etc.
Você pode considerar 'for loop' para isso:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
total = 800
sum(d.values())
, já que .values()
retorna a List
.
Você pode obter um gerador de todos os valores no dicionário, convertê-lo em uma lista e usar a função sum () para obter a soma de todos os valores.
Exemplo:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
sum
se em termos dereduce
-reduce
é uma forma mais geral (por exemplosum
,min
emax
pode ser escrita em termos dereduce
) e pode resolver outros problemas (por exemploproduct
) facilmente.