Est-il possible d'utiliser la méthode sort () ou une autre méthode pour trier une liste par colonne? Disons que j'ai la liste:
[
[John,2],
[Jim,9],
[Jason,1]
]
Et je voulais le trier pour qu'il ressemble à ceci:
[
[Jason,1],
[John,2],
[Jim,9],
]
Quelle serait la meilleure approche pour faire cela?
Modifier:
En ce moment, je rencontre une erreur d’index hors de portée. J'ai un tableau en 2 dimensions qui est disons 1000 lignes b 3 colonnes. Je veux le trier sur la troisième colonne. Est-ce le bon code pour cela?
sorted_list = sorted(list_not_sorted, key=lambda x:x[2])
Oui. Le sorted
intégré accepte un argument key
:
sorted(li,key=lambda x: x[1])
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]]
notez que sorted
renvoie une nouvelle liste. Si vous voulez trier sur place, utilisez le .sort
méthode de votre liste (qui accepte également, de manière pratique, un argument key
).
ou bien,
from operator import itemgetter
sorted(li,key=itemgetter(1))
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]]
Vous pouvez utiliser la méthode triée avec une clé.
sorted(a, key=lambda x : x[1])
Vous pouvez utiliser list.sort
avec son paramètre facultatif key
paramètre et a lambda
expression :
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=lambda x:x[1])
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
Cela va trier la liste sur place.
Notez que pour les grandes listes, il sera plus rapide d’utiliser operator.itemgetter
au lieu d'un lambda
:
>>> from operator import itemgetter
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=itemgetter(1))
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
sorted(list, key=lambda x: x[1])
Note: cela fonctionne aussi sur la variable de temps.
Le paramètre facultatif key
de sort
/sorted
est une fonction. La fonction est appelée pour chaque article et les valeurs de retour déterminent l'ordre du tri.
>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]]
>>> def my_key_func(item):
... print("The key for {} is {}".format(item, item[1]))
... return item[1]
...
>>> sorted(lst, key=my_key_func)
The key for ['John', 2] is 2
The key for ['Jim', 9] is 9
The key for ['Jason', 1] is 1
[['Jason', 1], ['John', 2], ['Jim', 9]]
prendre le print
des feuilles de fonction
>>> def my_key_func(item):
... return item[1]
Cette fonction est assez simple pour écrire "inline" en tant que fonction lambda
>>> sorted(lst, key=lambda item: item[1])
[['Jason', 1], ['John', 2], ['Jim', 9]]