309 votes

Comment trier une liste de listes par un index spécifique de la liste intérieure ?

J'ai une liste de listes. Par exemple,

[
[0,1,'f'],
[4,2,'t'],
[9,4,'afsd']
]

Si je voulais trier la liste extérieure par le champ chaîne de caractères des listes intérieures, comment le feriez-vous en python ?

7 votes

Lien vers le tutoriel : wiki.python.org/moin/HowTo/Tri

3 votes

398voto

gnibbler Points 103484

C'est un travail pour itemgetter

>>> from operator import itemgetter
>>> L=[[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> sorted(L, key=itemgetter(2))
[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]

Il est également possible d'utiliser une fonction lambda ici, cependant la fonction lambda est plus lente dans ce cas simple

0 votes

Et si je voulais ignorer l'affaire ?

8 votes

@bzupnick, utiliser key=lambda x:x[2].casefold() . Si votre Python n'est pas assez récent, utilisez simplement .lower() au lieu de .casefold()

0 votes

X = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97]] Avec une liste comme celle-ci, peut-on trier en utilisant itemgetter() par rapport aux éléments dans x[0][1] ?

253voto

mouad Points 21520

En place

>>> l = [[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> l.sort(key=lambda x: x[2])

pas en place en utilisant trié :

>>> sorted(l, key=lambda x: x[2])

6 votes

Pouvez-vous donner plus de détails sur in place y not in place ?

14 votes

@qun, "in place" signifie que la mémoire de l'ancienne liste est réutilisée pour la liste triée. "not in place" signifie que l'ancienne liste reste inchangée et qu'une nouvelle liste est créée.

0 votes

X = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97]] Avec une liste comme celle-ci, comment trier par rapport aux éléments de x[0][1] ?

99voto

fider Points 226

Itemgetter vous permet de trier par plusieurs critères / colonnes :

sorted_list = sorted(list_to_sort, key=itemgetter(2,0,1))

5 votes

Je pense que cette réponse est très importante. Je pense que les personnes qui essaient de trier par des index de tableaux internes tomberont ici mais que les personnes qui cherchent à trier par de MULTIPLES index de tableaux internes commenceront ici et votre réponse m'a permis de voir que itemgetter le fera pour vous !

21voto

Rahul Kumar Points 221

Des critères multiples peuvent également être mis en œuvre par le biais d'une fonction lambda.

sorted_list = sorted(list_to_sort, key=lambda x: (x[1], x[0]))

15voto

Abhishek Yadav Points 180
array.sort(key = lambda x:x[1])

Vous pouvez facilement trier en utilisant cet extrait, où 1 est l'indice de l'élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X