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