Сортировка списков с несколькими ключами

У меня есть список, подобный следующему:

[[2, 5, "bicycle"],
[1, 4, "table"],
[5, 2, "stew"],
[2, 2, "seesaw"],
...
]

Как я могу отсортировать этот список наиболее удобочитаемым способом, если основной ключ будет первым элементом, а вторичный ключ — вторым элементом, если первых элементов несколько?

Я бы отсортировал его, используя встроенный метод сортировки. Затем просмотрите и отсортируйте по вторичному ключу, если ключ повторяется более одного раза.

Bailey Kocin 07.02.2019 16:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
29
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать sorted с параметром key:

lst = [[2, 5, "bicycle"],
[1, 4, "table"],
[5, 2, "stew"],
[2, 2, "seesaw"]]

print(sorted(lst, key=lambda x: (x[0], x[1])))
# [[1, 4, 'table'], [2, 2, 'seesaw'], [2, 5, 'bicycle'], [5, 2, 'stew']]

Часть (x[0], x[1]) в основном просит Python отсортировать по первому элементу, а затем по второму элементу, если первый элемент дублируется.

Вау, я не знал, что это вещь. Его даже не было в ручном вводе, который ForceBru так любезно прислал мне в своем комментарии. Спасибо

Sz. Zsolt 07.02.2019 17:04

Встроенный sorted() позволяет указывать пользовательские ключи. Существует также полезный как для сортировки по нескольким ключам. Адаптация вашего примера к их

l = [[2, 5, "bicycle"],
[1, 4, "table"],
[5, 2, "stew"],
[2, 2, "seesaw"],
...
]

s = sorted(l, key=lambda o: o[1])     # sort on secondary key
sorted(s, key=lambda o: o[0])         # now sort on primary key

Можно использовать метод Сортировать(). Основной синтаксис:

list.sort(key=...)

Здесь я создал функцию и передал эту функцию в качестве ключа в методе sort(), который возвращает 1-й и 2-й элементы.

def get_key(item):
    return item[0], item[1]

mylist = [[2, 5, "bicycle"], [1, 4, "table"], [5, 2, "stew"], [2, 2, "seesaw"]]
mylist.sort(key=get_key)
print(mylist)

Другие вопросы по теме