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 ]
Tweet
Esta é uma dica simples mas útil em alguns momentos, visto que você pode ter um dicionário como este:
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:
Onde:
Uma maneira direta que obtém o mesmo resultado é:
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.
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!
A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.
Comentários
| Enviado 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, 21 de Maio de 2013
Área restrita
Leitura recomendada
Últimas publicações
- Britânicos criam tag capaz de rastrear pessoas e animais a distância via rádio
- Yahoo! confirma compra do Tumblr por US$1,1 bilhão
- Google+ melhora com novo visual, mas precisa achar um nicho
- Redes sociais articulam financiamento de novos projetos por meio do crowdfunding
- Perfis de presidenciáveis no Twitter visam cativar eleitores
Top 5 membros
- dddweb213 pts
- andersonop207 pts
- Jotah197 pts
- fbinasco165 pts
- fredbcn117 pts
Últimos membros cadastrados
- igorabbem 20/05
- paulinho2012em 20/05
- valkyem 18/05





