Ordenar instancias comparando diversos atributos

Arnau Sanchez pyarnau en gmail.com
Vie Dic 21 13:45:43 CET 2007


Víctor escribió:

>>>> personas = []
>>>> personas.append( Persona(edad=1, altura=50, peso=4500) )
>>>> personas.append( Persona(edad=10, altura=135, peso=45000) )
>>>> personas.append( Persona(edad=10, altura=136, peso=42000) )
>>>> personas.append( Persona(edad=10, altura=136, peso=46000) )

Un comentario... para un código final yo te recomendaría que separes más 
claramente datos y código:

datos_personas = [
     (1, 50, 4500),
     (10, 135, 45000),
     .....
]

....

personas = [Persona(edad=edad, altura=altura, peso=peso)
     for (edad, altura, peso) in datos_personas]

> En primer lugar, me gustaría ordenar a la gente por edad. En caso de
> que la edad coincida, las ordeno por altura y en último caso, por
> peso. ¿Cómo puedo implementarlo? Hasta el momento, sólo sé como
> ordenar comparando la edad.
> 
>>>> def compara(p1, p2):
> ...   if p1.edad < p2.edad: return 1
> ...   elif p1.edad == p2.edad: return 0
> ...   else: return -1

Es más fácil que eso:

import operator
sorted(lista_de_personas, key=operator.attrgetter("edad"))

sort/sorted, según te interese in-place o no.

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