Python: como encomendar uma lista personalizada?
Obs: Eu sei que as listas em python não são fixadas por ordem, mas acho que essa será. E eu estou usando Python 2.4
Eu tenho uma lista, como (por exemplo) esta:
mylist = [ ( u'Article', {"...some_data..."} ) ,
( u'Report' , {"...some_data..."} ) ,
( u'Book' , {"...another_data..."} ) ,
...#continue
]
Essa variável mylist é obtida de uma função e a 'ordem' da lista retornada varia. Então, às vezes será como no exemplo. Às vezes, o 'Relatório' vem antes de 'Artigo', etc.
Tenho uma ordem fixa que desejo nesta lista (e não é o alfabético).
Digamos que minha ordem fixa seja: 'Relatório', 'Artigo', 'Livro', ...
Então, o que eu quero é o seguinte: seja qual for a ordem que a minha lista for instanciada, eu quero reordená-la, fazendo o 'Relatório' ficar na frente, 'Artigo' na segunda, etc ...
Qual é a melhor abordagem para reordenar minha lista (usando o primeiro elemento da tupla de cada item da lista) usando meu pedido 'personalizado'?
Responda:
Eu acabei com isso:
mylist se tornou uma lista de dictos, assim:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
cada ditado com um 'id' que precisava ser classificado.
Como salvar a ordem correta em uma listaComo atribuir a ordem correta em uma lista:
correct_order = ['Report', 'Article', 'Book', ...]
e fazendo:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))