Obs: Sé que las listas en python no están corregidas, pero creo que esta será. Y estoy usando Python 2.4Python: cómo hacer un pedido personalizado de una lista?
Tengo una lista, como (por ejemplo) éste:
mylist = [ (u'Article', {"...some_data..."} ) ,
(u'Report' , {"...some_data..."} ) ,
(u'Book' , {"...another_data..."}) ,
...#continue
]
se obtiene Esta milista variable de una función, y el 'orden' de la lista devuelta variará. Entonces, a veces será como en el ejemplo. A veces, el 'Informe' vendrá antes que 'Artículo', etc.
Tengo un orden fijo que quiero en esta lista (y no es el orden alfabético).
Digamos que mi orden fijo es: 'Informe', 'Artículo', 'libro', ...
Por lo tanto, lo que quiero es que: cualquiera que sea el orden 'milista' se crea una instancia, quiero reordenarlo haciendo que 'Informe' permanezca al frente, 'Artículo' en segundo lugar, etc ...
¿Cuál es el mejor enfoque para reordenar mi lista (tomando el primer elemento de la tupla de cada elemento en la lista) usando mi 'personalizada ' ¿orden?
respuesta:
terminé con esto:
milista se convirtió en una lista de dicts, así:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
cada dict tener un 'id' que debía ser ordenado
guardar el orden correcto en un listAssigning la correct_order en una lista:
correct_order = ['Report', 'Article', 'Book', ...]
y haciendo:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
Es mejor usar una función de tecla en lugar de la función cmp en desuso que ya no existe en Python 3: 'ordenó (mi lista, clave = lambda x: d [x [0]])' –
No intenté con Python 3 todavía, entonces No sabía ... Gracias :) – Joril
También se recomienda para Python 2, ya que usar una función clave es más rápido que una función cmp. Consulte http://docs.python.org/library/functions.html#sorted –