web-dev-qa-db-fra.com

Python - Comment trier une liste de listes en fonction du quatrième élément de chaque liste?

Je voudrais trier la liste suivante de listes par le quatrième élément (l'entier) dans chaque liste individuelle.

unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']]

Comment puis-je faire ceci? Je vous remercie!

89
Dana Gray
unsorted_list.sort(key=lambda x: x[3])
152
Taymon

Utilisez sorted() avec un key comme suit -

>>> unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']]
>>> sorted(unsorted_list, key = lambda x: int(x[3]))
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']]

La lambda renvoie le quatrième élément de chacune des listes intérieures et la fonction sorted l'utilise pour trier ces listes. Cela suppose que int(elem) n'échouera pas pour la liste.

Ou utilisez itemgetter (comme l'a souligné le commentaire d'Ashwini, cette méthode ne fonctionnerait pas si vous disposiez d'une représentation sous forme de chaîne des nombres, car ils sont voués à échouer quelque part pour les nombres de 2 chiffres ou plus)

>>> from operator import itemgetter
>>> sorted(unsorted_list, key = itemgetter(3))
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']]
45
Sukrit Kalra