Ik heb wat gegevens in een lijst van lijsten of een lijst van tupels, zoals dit:
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
En ik wil sorteren op het 2e element in de deelverzameling. Dat wil zeggen, sorteren op 2,5,8 waarbij 2
is van (1,2,3)
, 5
is van (4,5,6)
. Wat is de meest gebruikelijke manier om dit te doen? Moet ik tupels of lijsten in mijn lijst opslaan?
Stephen's antwoord is degene die ik'zou gebruiken. Voor de volledigheid, hier's het DSU (decorate-sort-undecorate) patroon met list comprehensions:
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
Of, eenvoudiger gezegd:
[b for a,b in sorted((tup[1], tup) for tup in data)]
Zoals opgemerkt in de Python Sorting HowTo, is dit niet meer nodig sinds Python 2.4, toen sleutelfuncties beschikbaar kwamen.