super_banner_728x90

quarta-feira, 3 de agosto de 2011

Como ordenar um dicionário em Python

A dica de hoje é pra ordenar um dicionário em Python. Precisei fazer isso esses dias e descobri que é possível ordenar o dicionário tanto pelas chaves quanto pelos valores facilmente. Vejam o código abaixo:


# Vc vai precisar da função 'itemgetter',
# da biblioteca 'operator'
from operator import itemgetter


# Crie seu dicionário
dic = {'um':1, 'dois':2, 'dez':10, 'onze':11, 'seis':6, 'zero':0}


# O método items() dos dicionários retorna o par (chave, valor)
# como tuplas de tamanho 2
print dic.items()


[('seis', 6), ('dez', 10), ('um', 1), ('zero', 0), ('dois', 2), ('onze', 11)]


# A função 'sorted' recebe os ítens do dicionário e ordena
# de acordo com a chave ('key') escolhida, que pode ser
# o primeiro (0) ou o segundo (1) elementos das tuplas


# Passando o '1' para o itemgetter, vc ordenará o
# dicionário pelos valores.
print sorted(dic.items(), key=itemgetter(1))


[('zero', 0), ('um', 1), ('dois', 2), ('seis', 6), ('dez', 10), ('onze', 11)]


# Passando o '0' para o itemgetter, vc ordenará o
# dicionário pelas chaves (ou seja, nesse caso, os
# nomes em ordem alfabética).
print sorted(dic.items(), key=itemgetter(0))


[('dez', 10), ('dois', 2), ('onze', 11), ('seis', 6), ('um', 1), ('zero', 0)]


# Caso você queria ordenar decrescentemente, basta
# passar o parâmetro 'reverse=True' para a função 'sorted'
print sorted(dic.items(), key=itemgetter(1), reverse=True)


[('onze', 11), ('dez', 10), ('seis', 6), ('dois', 2), ('um', 1), ('zero', 0)]