Сортировать словарь по значению, но когда значение совпадает - PullRequest
0 голосов
/ 13 октября 2018

У меня есть этот словарь:

a = {'Atlanta': 4, 'Bronx': 4, 'San Diego': 30}

В настоящее время я знаю, как отсортировать его по значению от наибольшего к наименьшему:

s = sorted(a.items(), key = lambda t:t[1], reverse=True)

s = [('San Diego', 30), ('Atlanta', 4), ('Bronx', 4)]

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

s = [('San Diego', 30), ('Bronx', 4), ('Atlanta', 4)]

вместо того, что я имею выше.Есть ли удобный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Вы можете отсортировать вторичное условие с помощью кортежа

s = dict(sorted(a.items(), key= lambda x: (x[1], x[0]), reverse = True))
# {'San Diego': 30, 'Bronx': 4, 'Atlanta': 4}
0 голосов
/ 13 октября 2018

Вы можете сортировать кортежи с самими элементами кортежа в обратном порядке:

s = sorted(a.items(), key = lambda t: <b>t[::-1]</b>, reverse=True)

или вы можете сделать это более явным с помощью:

s = sorted(a.items(), key = lambda t: <b>(t[1], t[0])</b>, reverse=True)

Вышеописанное работает, потому что кортежменьше, чем другой кортеж, учитывая, что первый элемент первого кортежа меньше, чем другой кортеж, или два элемента равны, а следующий элемент первого кортежа меньше, чем следующий элемент второго элемента, и так далее.Так что (a1, a2) < (b1, b2) дано a1 < b1 or (a1 == b1 and a2 < b2).Таким образом, это означает, что, меняя местами два элемента кортежа, мы сначала сравниваем значение, а затем ключ, если это связь.

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