У меня есть список, подобный следующему:
[[2, 5, "bicycle"],
[1, 4, "table"],
[5, 2, "stew"],
[2, 2, "seesaw"],
...
]
Как я могу отсортировать этот список наиболее удобочитаемым способом, если основной ключ будет первым элементом, а вторичный ключ — вторым элементом, если первых элементов несколько?
Возможный дубликат Поиск кортежа в списке кортежей (сортировка по нескольким ключам)






Вы можете использовать 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 так любезно прислал мне в своем комментарии. Спасибо
Встроенный 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)
Я бы отсортировал его, используя встроенный метод сортировки. Затем просмотрите и отсортируйте по вторичному ключу, если ключ повторяется более одного раза.