Ordenar instancias comparando diversos atributos
Xin
xinxic en gmail.com
Sab Dic 22 21:15:01 CET 2007
Yo lo haria así,
def __cmp__(self,other):
return cmp(self.edad,other.edad) or \
cmp(self.altura,other.altura) or \
cmp(self.peso,other.peso)
Lo que no sé és el orden, quizà debas intercanviar el orden de los
operandos.
Xin
El 21/12/2007, a las 13:36, Víctor escribió:
> ¡Hola a todos!
>
> Necesito ordenar una lista de instancias de la misma clase comparando
> diversos atributos. Os simplifico el problema:
>
>>>> class Persona(object):
> ... def __init__(self, edad=None, altura=None, peso=None):
> ... self.edad = edad
> ... self.altura = altura
> ... self.peso = peso
> ...
>>>> 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) )
>
> 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
>
> ¿Dónde defino el resto de comparaciones? ¿En la misma función o en
> funciones separadas? Gracias de antemano y un saludo.
>
>
> --
> Víctor Peinado | NLP & IR Group - UNED | http://nlp.uned.es/~victor
> Tel (+34) 91 398 8106
> Skype/GTalk: vitojph
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
_______________________________________________
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