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