Bem Vindo!

Esse é o canal de comunicação entre você, internauta, cliente, parceiro com a 2XT. Esse espaço tem o objetivo de manter informado todos os profissionais que estão de alguma forma ligados a nossa empresa.
Obrigado pela visita.

março
2009

01

Ordenando dicionarios em Python

Tags :

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.

http://www.megaupload.com/pt/?d=CWWDL6I8

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.