Somando valores em um dicionário de strings


Autor/fonte: César Tinum da Silva
E-mail/Url: http://www.vivaolinux.com.br/dica/Python-Somando-valores-em-um-diciona...
Tags: [ strings ]



Digg del.icio.us

Esta é 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.




Enviado por xKuRt em 07/05/2009 às 10:37


Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por igorsobreira em 07/05/2009 às 20:01

As funções map() e filter() são realmente bem úteis, mas nesse caso acho que só dificultou a leitura...

Eu teria feito assim:

>>> dic = {'a':'10','b':'20','c':'30','d':'40','c':'50'}
>>> sum( float(v) for v in dic.values() )
120.0

(considerando que realmente que não precisa tratar o ValueError)

Generators expressions, bem legível e muito eficiente.`

Abraço!

--
Igor Sobreira


Envio de comentário:




  

Quarta, 23 de Abril de 2014




Leitura recomendada

Livro - Java Efetivo

Top 5 membros

Últimos membros online

  • xKuRtem 23/04 às 11:25
  • biuem 23/04 às 10:16
  • 1em 23/04 às 07:30

Últimos membros cadastrados



Capa do livro
Oracle Database 11g SQL


Capa do livro
Microsoft SQL Server 2012 Express: Guia Prático e Interativo


Capa do livro
Service Desk Corporativo - Solução com Base na ITIL® V3





Hostnet

IMD