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.12també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 sixmó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()))
sumse em termos dereduce-reduceé uma forma mais geral (por exemplosum,minemaxpode ser escrita em termos dereduce) e pode resolver outros problemas (por exemploproduct) facilmente.