Cum se sortează (listă/tuplu) de liste/tuple după elementul de la un anumit index?

Am niște date fie într-o listă de liste, fie într-o listă de tupluri, astfel:

data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]

Și vreau să sortez după al doilea element din subset. Adică să sortez după 2,5,8 unde 2 este din (1,2,3), 5 este din (4,5,6). Care este modalitatea obișnuită de a face acest lucru? Ar trebui să stochez tupluri sau liste în lista mea?

Soluția
sorted_by_second = sorted(data, key=lambda tup: tup[1])

sau:

data.sort(key=lambda tup: tup[1])  # sorts in place
Comentarii (6)
from operator import itemgetter
data.sort(key=itemgetter(1))
Comentarii (2)

Răspunsul lui Stephen's este cel pe care l-aș folosi. Pentru a fi complet, iată modelul DSU (decorate-sort-undecorate) cu înțelegeri de liste:

decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]

Sau, mai pe scurt:

[b for a,b in sorted((tup[1], tup) for tup in data)]

După cum se menționează în Python Sorting HowTo, acest lucru nu mai este necesar din Python 2.4, când au devenit disponibile funcțiile cheie.

Comentarii (1)