J'ai des données dans une liste de listes ou une liste de tuples, comme ceci :
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
Et je veux trier par le 2ème élément du sous-ensemble. C'est-à-dire, trier par 2,5,8 où 2
est de (1,2,3)
, 5
est de (4,5,6)
. Quelle est la façon habituelle de faire cela ? Dois-je stocker des tuples ou des listes dans ma liste ?
[La réponse de Stephen] (https://stackoverflow.com/questions/3121979/python-sort-list-tuple-in-list/3121985#3121985) est celle que j'utiliserais. Pour être complet, voici le modèle DSU (decorate-sort-undecorate) avec des compréhensions de listes :
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
Ou, plus succinctement :
[b for a,b in sorted((tup[1], tup) for tup in data)]
Comme indiqué dans le Python Sorting HowTo, ceci n'est plus nécessaire depuis Python 2.4, lorsque les fonctions clés sont devenues disponibles.