Python: Somando valores em um dicionário de strings

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

[ Hits: 27.027 ]

 


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

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

Ordenando dicionários em Python

Criando variáveis dinamicamente com Javascript

Leitura recomendada

Spyder - Excelente IDE para desenvolver em Python

Luna - Assistente virtual modo TXT para Linux

Python - Diferença entre == e is

Hardware Project Simulator 0.1 - Simulador de montagem de computadores

Usando a função map em vez de for (Python)

  

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