сортировать список по ключам и для элементов с теми же ключами, что и по значениям в python - PullRequest
1 голос
/ 22 апреля 2020

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

Рассмотрим список [[1,4], [3,3], [3,2] ,[1,2], [1,3], [2,3], [1,5]]

сейчас, используя

def keyFunc(j):
        return j[0]

job = sorted(job, key=keyFunc, reverse=True)

Я получил до [[all 3s], [all 2s], [all 1s]]

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

т.е. [[3, 3], [3,2], [2,3], [1,5], [1,4], [1,3], [1,2]]

Как это сделать в python?

Ответы [ 3 ]

2 голосов
/ 22 апреля 2020

Почему вы используете неправильную функцию клавиш, когда не , использующий функцию клавиш, уже делает то, что вы хотите? , вы можете захотеть сделать job.sort(reverse=True) вместо создания нового списка.

1 голос
/ 22 апреля 2020

Вы можете изменить keyFun c на

def keyFunc(j):
    return j[0]*10+j[1]

или

ls = [[3, 3], [3, 2], [2, 3], [1, 5], [1, 4], [1, 3], [1, 2]]
sorted(ls, key=lambda x: x[0]*10+x[1], reverse=True)

, который будет сортировать оба числа, как вы описали.

1 голос
/ 22 апреля 2020

Я думаю, что вы можете просто отменить ключи сортировки для сортировки по убыванию дважды:

>>> lst = [[1,4], [3,3], [3,2] ,[1,2], [1,3], [2,3], [1,5]]
>>> sorted(lst, key=lambda x: (-x[0], -x[1]))
[[3, 3], [3, 2], [2, 3], [1, 5], [1, 4], [1, 3], [1, 2]]

(-x[0], -x[1]) сначала отсортирует по первому элементу, затем, если возникнут какие-либо связи, сортирует по второму элементу, оба в по убыванию. Мы можем сделать его нисходящим, отрицая со знаком минус -.

Но, как подсказывает @ Heap Overflow , нам не нужно этого делать, потому что мы можем просто передать reverse=True, и sorted() будет естественно сортировать по первому элементу, затем второй в порядке убывания. Нет необходимости в ключе сортировки.

Вы можете проверить это, выполнив следующее:

>>> sorted(lst, reverse=True)
[[3, 3], [3, 2], [2, 3], [1, 5], [1, 4], [1, 3], [1, 2]]
>>> sorted(lst, key=lambda x: (x[0], x[1]), reverse=True)
[[3, 3], [3, 2], [2, 3], [1, 5], [1, 4], [1, 3], [1, 2]]

, которые оба дают одинаковые результаты.

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