Tengo algunos datos en una lista de listas o en una lista de tuplas, así:
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
Y quiero ordenar por el 2º elemento del subconjunto. Es decir, ordenar por 2,5,8 donde 2
es de (1,2,3)
, 5
es de (4,5,6)
. ¿Cuál es la forma común de hacer esto? ¿Debo almacenar tuplas o listas en mi lista?
[La respuesta de Stephen (https://stackoverflow.com/questions/3121979/python-sort-list-tuple-in-list/3121985#3121985) es la que yo utilizaría. Para completar, aquí está el patrón DSU (decorar-acompañar-desacompañar) con comprensiones de lista:
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
O, más tersamente:
[b for a,b in sorted((tup[1], tup) for tup in data)]
Como se indica en el Python Sorting HowTo, esto ha sido innecesario desde Python 2.4, cuando las funciones clave estuvieron disponibles.