Под сортировка в Python 3,8 - PullRequest
2 голосов
/ 03 мая 2020

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

Например,

tally = {"hello": 5, "dog": 12, "cat": 1, "bird": 5, "lion": 5}

Я хочу вывести список, содержащий каждое из этих слов, отсортированных по убыванию.

output = ["dog", "hello", "bird", "lion", "cat"]

Затем в рамках этой сортировки подгруппируйте их по алфавиту. Как в:

final_result = ["dog", "bird", "hello", "lion", "cat"]

На самом деле мне не нужно получать список output, мне нужно только чтобы получить final_result. Так что, если есть способ сделать это с 1 шагом, это было бы лучше. Так как мне это сделать?

Я попытался использовать key = lambda t:t[1] для начальной сортировки, но это привело к кортежу с ключами и значениями из моего словаря. Теперь это, очевидно, не сработало, потому что мне нужны были только слова, а также я понятия не имел, как выполнить подсортировку в этом.

Заранее спасибо за помощь.

1 Ответ

4 голосов
/ 03 мая 2020

Вы можете использовать пользовательский key для сортировки в соответствии с обоими условиями. Это можно сделать за один шаг, указав кортеж (-value,key), где, взяв отрицательный знак values, мы получим сортировку по убыванию:

>>> sorted(tally,key=lambda x: (-tally[x],x))
['dog', 'bird', 'hello', 'lion', 'cat']

Лог c (-value,key) задается @yatu

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