Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Ordenando dicionários em Python
Linux user
Publicado por César tinum da silva em 05/02/2009

Login: mago_dos_chats, 49675 pontos
[ Hits: 3276 ]

Ordenando dicionários em Python

Bom galera, vai uma dica legal sobre Python. Como ordenar dicionários. Quem já tentou ordenar algum dicionário em Python percebeu que ele simplesmente não mantém a ordem com que os dados são inseridos, ou seja, se eu fizer isto:

##DIC 1 E O DICIONÁRIO QUE SERÁ ORDENADO
dic_1 = {'a':1,'b':3,'c':2}
##DICIONÁRIO AUXILIAR
dic_aux = dic_1
##ORDENANDO DIC_1 PELOS VALORES
dic_1 = sorted(dic_1.values())
##PEGA VALORES DO DIC_1 E VAI MONTANDO DIC_RESULTADO A PARTIR DO MENOR VALOR
dic_resultado = {}
for i in dic_1:
   for item in dic_aux:
      if item[i] == i
         dic_resultado[item] = i
print dic_resultado

O dicionário resultado teria ordem aleatória, ou seja, qualquer ordem, menos a que nos queremos (ordem de inserção). Bom, se o Python não tivesse o mal costume não manter a ordem no dicionário, conforme os itens são adicionados, isto resolveria o nosso problema. Mas como ele não mantém a ordem, precisaremos de uma classe auxiliar que faça este trabalho. A classe se chama "ordict.py", está disponível neste link.

Coloque o arquivo no mesmo diretório que o seu arquivo Python e faça a importação da classe desta maneira no começo do seu script:

from odict import *

Pronto, agora seu script enxerga todos os métodos implementados em "odict.py". Agora vamos usá-lo. Basicamente o script de ordenação será o mesmo, com a diferença que o vetor resultado em vez de ser um dicionário será uma instância (objeto) da classe "OrdeneDict", ficando assim o resultado final:

from odict import *
##DIC 1 E O DICIONÁRIO QUE SERA ORDENADO
dic_1 = {'a':1,'b':3,'c':2}
##DICIONARIO AUXILIAR
dic_aux = dic_1
##ORDENANDO DIC_1 PELOS VALORES
dic_1 = sorted(dic_1.values())
##PEGA VALORES DO DIC_1 E VAI MONTANDO DIC_RESULTADO A PARTIR DO MENOR VALOR
dic_resultado = OrderedDict()
for i in dic_1:
   for item in dic_aux:
      if item[i] == i:
         dic_resultado[item] = i
print dic_resultado

Bom, é isso aí por enquanto, espero que seja útil.

Abraço e até a próxima.


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Livro: Python para desenvolvedores
   Dica Linux recomendada Lançamento do Stoq versão 0.8.10
   Dica Linux recomendada Internacionalização dos programas em Python
   Dica Linux recomendada Hardware Project Simulator 0.2 com interface gráfica e correções
   Dica Linux recomendada Desligando o seu computador com o dedão do pé

Comentários
[1] Comentário enviado por allisonvoll em 09/02/2009 - 10:42h:

Ou então de uma forma mais simples ( e sem uma classe auxiliar ):

sorted(a.items(),lambda x,y: cmp(x[1],y[1]))

onde *a* é o dicionário.

[2] Comentário enviado por mago_dos_chats em 09/02/2009 - 16:41h:

sim allisonvoll, so que eu quero como resposta um dicionario ordenado, não uma lista, se fosse pra obter uma lista a 1 implementação usada como exemplo resolveria o caso não acha??
abraço


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.