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