Ordenar lista que tiene elementos clase
Arnau Sanchez
pyarnau en gmail.com
Jue Jul 3 18:53:08 CEST 2008
Alexis Roda escribió:
>> persona1 = Persona("nombre1", "18", "M")
>> persona2 = Persona("nombre2", "19", "F")
>
> Puedes utilizar el método sort() de las listas. Ten presente que este
> método ordena la lista in situ, *no* devuelve una copia ordenada de la
> lista.
Y si no lo quieres in situ puedes usar el built-in "sorted".
> def compara_edad_sexo_nombre(p1, p2) :
> return cmp((p1.edad, p1.sexo, p1.nombre),
> (p2.edad, p2.sexo, p2.nombre))
Una alternativa a pasar una función de comparación (parámetro "cmp"), es indicar
cómo obtener los valores para realizar dicha comparación (parámetro "key"):
personas = [persona1, persona2]
key = lambda persona: [persona.edad, persona.sexo, persona.nombre]
sorted(personas, key=key)
Lo mismo con operator.attrgetter queda:
import operator
personas = [persona1, persona2]
key = lambda persona: operator.attrgetter("edad", "sexo", "nombre")
sorted(personas, key=key)
---
Pero como ya te han comentado, si estos objetos son el resultado de una búsqueda
en un ORM, puedes pedirle que te los dé ya ordenados por el criterio que
necesites, lo hará más rápido.
arnau
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es