Python: Somando valores em um dicionário de strings

Publicado por César tinum da silva em 05/05/2009

[ Hits: 27.248 ]

 


Python: Somando valores em um dicionário de strings



Bom galera, é uma dica simples mas útil em alguns momentos, visto que você pode ter um dicionário como este:

dic = {'a':'10','b':'20','c':'30','d':'40','c':'50'}

E você quer somar os valores contidos no dicionário, ou seja, sum(dic.values()).

Um método de fazer isso é usando a função anônima lambda combinada com funções do python, neste caso filter e map.

Vejam como ficou:

total = sum(filter(lambda elem:elem,(map(lambda dic:float(dic),dic.values()))))

Onde:
  • a função map que é o 2 elemento da função filter que vai converter todos valores do dicionário dic para float e gerando uma lista de floats;
  • a função filter só é utilizada para formar uma lista com as respostas, ela vai adicionando cada valor convertido no 2 parâmetro, no caso o resultado da função map, que é uma lista de floats a uma lista de resposta que terá todos os termos somados pela função sum e o resultado guardado em total.

Uma maneira direta que obtém o mesmo resultado é:

total = sum(map(lambda dic:float(dic),dic.values()))

Mas fica um exemplo de combinação de funções do Python como estudo e também uma forma de utilizar a função lambda, que economiza muito código.

Abraço e até a próxima.

Outras dicas deste autor

Ordenando dicionários em Python

Criando variáveis dinâmicas em PHP a partir de um formulário

Criando variáveis dinamicamente com Javascript

Leitura recomendada

Crie o seu jogo roguelike em Python

Função para Abrir uma Interface do tkinter no Centro da Tela em Python

Referenciando linhas anteriores em um arquivo csv usando Pandas

Hardware Project Simulator 0.1 - Simulador de montagem de computadores

TradutorOOoNote - plugin para OpenOffice.org que traduz textos para qualquer língua

  

Comentários
[1] Comentário enviado por voyeg3r em 27/10/2009 - 17:10h

Usando list compreensions

sum([ float(x) for x in dic.values()])

tudo está englobado na função sum()
dentro um list compreension [ ]
float(x) para cada x em dicionario.valores()


[2] Comentário enviado por mago_dos_chats em 28/10/2009 - 09:26h

sim.... funcionaria tb.. mais eu tava tentei mostrar o uso de outras funções.... map e a função anonima lambda...
Valeu pela contribuição.

[3] Comentário enviado por voyeg3r em 05/03/2010 - 14:07h

Fiz de outro modo bem legal

tudo dentro da função 'sum' usando uma list compreension

sum([int(x) for x in dic.values()])

Valores em ponto flutuante

sum([float(x) for x in dic.values()])



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts