A veces requerimos ordenar valores de una secuencia (list, set) en un orden diferente del "default", o definitivamente no hay ningún default definido. Tomemos por ejemplo una lista de objetos...


In [4]:
import random
class item(object):
    def __init__(self):
        self.x = random.randint(1, 1000)
    
mi_lista = []    
for n in range(15):
    mi_lista.append(item())

En el anterior código hemos creado una lista de 15 objetos item, cada objeto item tiene un valor x tomado aleatoriamente. Si recorremos dicha lista podremos ver que el orden es, pseudoaleatorio:


In [5]:
for elemento in mi_lista:
    print elemento.x


825
74
648
183
603
452
770
373
139
188
630
140
966
939
559

Podemos ordenar los elementos de la lista por cualquier elemento arbitrario que desearamos. En este caso crearemos una lista nueva, en donde el orden estará dado por la propiedad x de cada objeto agregado a la lista. Para ello podemos usar el parámetro key:


In [7]:
lista_ordenada = sorted(mi_lista, key = lambda elemento: elemento.x)
for elemento in lista_ordenada:
    print elemento.x


74
139
140
183
188
373
452
559
603
630
648
770
825
939
966