Belirli bir indeksteki elemana göre listeleri/toplaları (liste/tuple) nasıl sıralayabilirim?

Bunun gibi bir liste ya da tuple listesi halinde bazı verilerim var:

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

Ve alt kümedeki 2. öğeye göre sıralamak istiyorum. Yani, 2 (1,2,3)'ten, 5 (4,5,6)'dan olmak üzere 2,5,8'e göre sıralama. Bunu yapmanın yaygın yolu nedir? Listemde tuple'ları mı yoksa listeleri mi saklamalıyım?

Çözüm
sorted_by_second = sorted(data, key=lambda tup: tup[1])

ya da:

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

Stephen'ın cevabı benim kullanacağım cevap. Bütünlük için, liste kavramaları ile DSU (decorate-sort-undecorate) kalıbı burada'dır:

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

Ya da daha kısa bir şekilde:

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

Python Sorting HowTo](http://wiki.python.org/moin/HowTo/Sorting#TheOldWayUsingDecorate-Sort-Undecorate)'da belirtildiği gibi, anahtar fonksiyonların kullanılabilir hale geldiği Python 2.4'ten beri bu gereksizdir.

Yorumlar (1)