Вопрос-Ответ

How to sort a list/tuple of lists/tuples by the element at a given index

Как отсортировать список / кортеж списков / кортежей по элементу с заданным индексом

У меня есть некоторые данные либо в виде списка списков, либо в виде списка кортежей, например:

data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]

И я хочу отсортировать по 2-му элементу в подмножестве. Имеется в виду сортировка по 2,5,8, где 2 это from (1,2,3), 5 это from (4,5,6). Каков распространенный способ сделать это? Должен ли я хранить кортежи или списки в моем списке?

Переведено автоматически
Ответ 1
sorted_by_second = sorted(data, key=lambda tup: tup[1])

или:

data.sort(key=lambda tup: tup[1])  # sorts in place

Режим сортировки по умолчанию - по возрастанию. Для сортировки в порядке убывания используйте опцию reverse=True:

sorted_by_second = sorted(data, key=lambda tup: tup[1], reverse=True)

или:

data.sort(key=lambda tup: tup[1], reverse=True)  # sorts in place
Ответ 2
from operator import itemgetter
data.sort(key=itemgetter(1))
Ответ 3

Для сортировки по нескольким критериям, а именно, например, по второму и третьему элементам в tuple, пусть

data = [(1,2,3),(1,2,1),(1,1,4)]

и поэтому определите a, lambda который возвращает a tuple который описывает приоритет, например

sorted(data, key=lambda tup: (tup[1],tup[2]) )
[(1, 1, 4), (1, 2, 1), (1, 2, 3)]
Ответ 4

Я просто хочу добавить к ответу Стивена, если вы хотите отсортировать массив от высокого к низкому, другой способ, отличный от приведенных выше комментариев, - просто добавить это в строку:

reverse = True

и результат будет следующим:

data.sort(key=lambda tup: tup[1], reverse=True)
python list sorting