import operator
def ordena_valor(d):
"""
Apresenta um dicionario ordenado pelo valor. Retorna o resultado sob a
forma de lista
"""
items = d.items()
ordenado =sorted(items,key=operator.itemgetter(1))
return ordenado
Como se pode ver, embora o código seja pequeno, aparecem muitas coisas novas. Desde logo, o módulo operator, essencial para resolver a questão. Esse módulo permite-nos usar o método itemgetter que vai a uma estrutura buscar um dos seus componentes. Como sabemos que os items de um dicionário são tuplos com duas componentes (a chave e o valor), temos que extrair a sua segunda componente (posição 1). Na linha está o essencial da solução. O método sorted, que actua sobre listas, recebe a lista dos pares (chave:valor) e como critério de ordenamento o segundo argumento do par (o valor) (key=operator.itemgetter(1)). E assim se vê como um problema complexo pode ser resolvido de modo rápido e claro ... quando se conhecem bem as operações facultadas pela linguagem e pelos seus módulos.
uma lição que aprendi:
ResponderEliminarantes de pensar em complicar , ver o que a linguagem nos aferece
Haha, pessoalmente mfico-me pelos basicos e chego la, o que e mau, assim nunca avanço --U Mas prontos...
ResponderEliminardef orderbykey(dict):
list=[]
for a in dict.keys():
b=(dict[a],a)
list.append(b)
list.sort()
print list
Quem não tem cão caça com gato... Assim é natural que no início do contyacto com uma linguagem de programação nova, as nossas soluções possam ser mais ... primitivas! Mas não é problemático! Bom é ser capaz de encontrar uma solução. O resto vem com o tempo e a prática!!
ResponderEliminarJá agora. Uma solução alternativa, com mais umas coisitas novas.
def ordena_chaves(item1,item2):
--- """ Compara dois valores."""
--- return cmp(item1[1],item2[1])
def my_sort(dic):
--- lista_items = dic.items()
--- lista_items.sort(lambda x, y: ordena_chaves(x,y))
--- return lista_items