сортировка списков с несколькими ключами - PullRequest
0 голосов
/ 07 февраля 2019

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

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

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

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Встроенный 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
0 голосов
/ 07 февраля 2019

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

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)
0 голосов
/ 07 февраля 2019

Вы можете использовать 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]) part в основном просит Python выполнить сортировку по первому элементу, а затем по второму элементу в случае дублирования первого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...