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:




  

Terça, 30 de Agosto de 2016




Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Questões Comentadas de Informática para Concurso Público na Área de Tecnologia da Informação


Capa do livro
Java Simplificado


Capa do livro
Segurança e Auditoria em Sistema de Informação





Hostnet

IMD