Ho dei dati in una lista di liste o in una lista di tuple, come questa:
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
E voglio ordinare per il 2° elemento del sottoinsieme. Cioè, ordinare per 2,5,8 dove 2
è da (1,2,3)
, 5
è da (4,5,6)
. Qual è il modo comune per farlo? Dovrei memorizzare tuple o liste nella mia lista?
[La risposta di Stephen (https://stackoverflow.com/questions/3121979/python-sort-list-tuple-in-list/3121985#3121985) è quella che userei io. Per completezza, ecco il modello DSU (decorate-sort-undecorate) con la comprensione delle liste:
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
O, più sinteticamente:
[b for a,b in sorted((tup[1], tup) for tup in data)]
Come notato nel Python Sorting HowTo, questo non è più necessario da Python 2.4, quando le funzioni chiave sono diventate disponibili.