Ordenar instancias comparando diversos atributos

Arnau Sanchez pyarnau en gmail.com
Vie Dic 21 16:03:00 CET 2007


Del correo anterior se me olvidó comentar:

 >   if p1.edad < p2.edad: return 1
 >   elif p1.edad == p2.edad: return 0
 >   else: return -1

Ya existe una función builtin que hace eso (salvo signo): "cmp"

Víctor escribió:

>> import operator
>> sorted(lista_de_personas, key=operator.attrgetter("edad"))
>>
>> sort/sorted, según te interese in-place o no.
> 
> Ok, pero ¿cómo aplico los tres criterios de ordenación? ¿De forma
> secuencial, uno detrás de otro o especificando en algún sitio que sólo
> cuando un criterio coincide (la edad por ejemplo), he de ordenador
> según la altura?

Es sencillo, sólo tienes que adaptar la clave (key) a tu gusto, de forma 
que devuelva una secuencia (tupla o lista):

key = lambda persona: (persona.edad, persona.altura, persona.peso)
sorted(una_lista_de_personas, key=key)

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