Πώς να ταξινομήσετε (λίστα/πολλαπλάσιο) λίστες/πολλαπλάσια με βάση το στοιχείο σε ένα δεδομένο δείκτη;

Έχω κάποια δεδομένα είτε σε μια λίστα από λίστες είτε σε μια λίστα από πλειάδες, όπως αυτή:

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

Και θέλω να ταξινομήσω με βάση το 2ο στοιχείο στο υποσύνολο. Δηλαδή, ταξινόμηση κατά 2,5,8, όπου το 2 είναι από το (1,2,3), το 5 είναι από το (4,5,6). Ποιος είναι ο συνήθης τρόπος για να γίνει αυτό; Πρέπει να αποθηκεύω πλειάδες ή λίστες στη λίστα μου;

Λύση
sorted_by_second = sorted(data, key=lambda tup: tup[1])

ή:

data.sort(key=lambda tup: tup[1])  # sorts in place
Σχόλια (6)
from operator import itemgetter
data.sort(key=itemgetter(1))
Σχόλια (2)

Η απάντηση του Stephen's είναι αυτή που θα χρησιμοποιούσα. Για την πληρότητα, εδώ'είναι το πρότυπο DSU (decorate-sort-undecorate) με καταλαβαίνεις λίστα:

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

Ή, πιο συνοπτικά:

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

Όπως σημειώνεται στο Python Sorting HowTo, αυτό είναι περιττό από την Python 2.4, όταν οι βασικές συναρτήσεις έγιναν διαθέσιμες.

Σχόλια (1)