Как отсортировать многомерный массив по столбцу?
Есть ли способ использовать метод sort() или любой другой метод для сортировки списка по столбцу? Допустим, у меня есть список:
[
[John,2],
[Jim,9],
[Jason,1]
]
И я хотел отсортировать его так, чтобы он выглядел так:
[
[Jason,1],
[John,2],
[Jim,9],
]
Каким будет лучший способ сделать это?
Edit:
Сейчас я столкнулся с ошибкой индекса вне диапазона. У меня есть 2-мерный массив, который позволяет сказать 1000 строк b 3 столбца. Я хочу сортировать его на основе третьего столбца. Это правильный код для этого?
sorted_list = sorted(list_not_sorted, key=lambda x:x[2])
Ответы
Ответ 1
Да. Встроенный sorted
принимает аргумент key
:
sorted(li,key=lambda x: x[1])
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]]
обратите внимание, что sorted
возвращает новый список. Если вы хотите сортировать на месте, используйте метод .sort
вашего списка (который также удобно принимает аргумент key
).
или, альтернативно,
from operator import itemgetter
sorted(li,key=itemgetter(1))
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]]
Подробнее о вики python.
Ответ 2
Вы можете использовать отсортированный метод с помощью ключа.
sorted(a, key=lambda x : x[1])
Ответ 3
Вы можете использовать list.sort
с дополнительным key
параметром и lambda
выражение:
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=lambda x:x[1])
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
Это отсортирует список на месте.
Обратите внимание, что для больших списков будет быстрее использовать operator.itemgetter
вместо lambda
:
>>> from operator import itemgetter
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=itemgetter(1))
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
Ответ 4
Необязательный key
параметр sort
/sorted
- это функция. Функция вызывается для каждого элемента, а возвращаемые значения определяют порядок сортировки
>>> 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]]
выходя из функции print
из функции
>>> def my_key_func(item):
... return item[1]
Эта функция достаточно проста для записи "inline" в виде лямбда-функции
>>> sorted(lst, key=lambda item: item[1])
[['Jason', 1], ['John', 2], ['Jim', 9]]
Ответ 5
sorted(list, key=lambda x: x[1])
Примечание: это работает и во временной переменной.