Obs: so che gli elenchi in python non sono corretti per l'ordine, ma pensate che questo sarà. e sto usando Python 2.4Python: come ordinare un elenco personalizzato?
Ho un elenco, come (per esempio) questo:
mylist = [ (u'Article', {"...some_data..."} ) ,
(u'Report' , {"...some_data..."} ) ,
(u'Book' , {"...another_data..."}) ,
...#continue
]
Questa mylist variabile è ottenuto da una funzione, e l' 'ordine' della lista restituita varierà. Quindi, a volte sarà come nell'esempio. A volte, il "Rapporto" verrà prima di "Articolo", ecc.
Ho un ordine fisso che desidero in questo elenco (e non è l'alfabetico).
Diciamo che il mio ordine fisso è: 'Report', 'articolo', 'Book', ...
Quindi, quello che voglio è che: qualunque ordine 'mylist' viene creata un'istanza, voglio riordinare facendo 'Report' rimanere in primo piano, 'Articolo' al secondo, ecc ...
Qual è l'approccio migliore per riordinare la mia lista (prendendo il primo elemento della tupla di ogni elemento della lista) usando la mia 'custom' ' ordine?
Risposta:
ho finito con questo:
mylist divenne un elenco di dicts, in questo modo:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
ogni dict avere un 'id' che doveva essere ordinato.
Salvare l'ordine corretto un listAssigning il correct_order in un elenco:
correct_order = ['Report', 'Article', 'Book', ...]
e fare:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
Meglio usare una funzione chiave piuttosto che la funzione cmp deprecata che non esce più in Python 3: 'sort (mylist, key = lambda x: d [x [0]])' –
Non ho ancora provato Python 3, quindi Non sapevo .. Grazie :) – Joril
Si consiglia anche per Python 2 come l'utilizzo di una funzione chiave è più veloce di una funzione cmp. Vedi http://docs.python.org/library/functions.html#sorted –