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:




  

Segunda, 22 de Dezembro de 2014




Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Aprenda J2ee Em 21 Dias


Capa do livro
Redes de Computadores - Guia Total


Capa do livro
Java e Web para Concursos





Hostnet

IMD