Сортировка 2D списка в python с условиями - PullRequest
1 голос
/ 01 мая 2020

У меня есть двухмерный список, подобный этому:

[
    [abc, 5],
    [abd, 21],
    [abb, 10],
    [abc, 3],
    [abb, 15],
    [abd, 20]
]

Первый: мне нужно отсортировать список в лексикографическом порядке (что довольно просто)

Второй: если их несколько элементы в первом столбце, отсортируйте список (только те же элементы) по второму столбцу (в порядке убывания).

Итак, я хочу получить такой результат:

[
    [abb, 15],
    [abb, 10],
    [abc, 5],
    [abc, 3],
    [abd, 21],
    [abd, 20]
]

Ответы [ 2 ]

1 голос
/ 01 мая 2020
Функция сортировки

Python стабильна, это означает, что если два элемента сравниваются друг с другом, их относительные позиции не меняются. Элементы меняют положение только в том случае, если они сравниваются неравно друг с другом.

Кроме того, сортировка принимает необязательный параметр key, который представляет собой функцию, определяющую, какие значения сортировать следует сравнивать. Вы можете определить полную функцию для этого, но обычно определить короткую лямбда-функцию, если вы собираетесь использовать ее только один раз.

Соберите их вместе, и вы можете сначала отсортировать списки по их вторым элементам затем сортируйте их во второй раз по первым элементам. Относительные позиции из первого сорта будут сохраняться после второго.

a = [
    ['abc', 5],
    ['abd', 21],
    ['abb', 10],
    ['abc', 3],
    ['abb', 15],
    ['abd', 20]
]

# Sort by second element first, in descending order
a = sorted(a, key=lambda x: x[1], reverse=True)  

# Then sort by first element, in ascending order
a = sorted(a, key=lambda x: x[0])  

print(a)  # [['abb', 15], ['abb', 10], ['abc', 5], ['abc', 3], ['abd', 21], ['abd', 20]]
0 голосов
/ 01 мая 2020

Метод описан в мельчайших подробностях здесь: https://portingguide.readthedocs.io/en/latest/comparisons.html

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