Ответ 1
Что-то вроде
In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}
In [2]: sorted(d.items(), key=lambda x: (-x[1], x[0]))
Out[2]: [('apple', 5), ('orange', 5), ('banana', 3)]
Сразу после обнаружения удивительной сортировки(), я снова застрял.
Проблема заключается в том, что у меня есть словарь строки формы (key): integer (value), и мне нужно отсортировать его в порядке убывания его целочисленных значений, НО если два элемента, для которых есть одно и то же значение, то по возрастанию ключа.
Пример, чтобы сделать его понятным:
d = {'banana':3, 'orange':5, 'apple':5}
out: [('apple', 5), ('orange', 5), ('banana', 3)]
После некоторых исследований я пришел к чему-то вроде:
sorted(d.items(), key=operator.itemgetter(1,0), reverse=True)
out: [('orange', 5), ('apple', 5), ('banana', 3)]
Это происходит потому, что он реверсирует сортировку как значения, так и ключа. Мне нужно, чтобы ключ был отменен.
Я бы очень признателен за помощь здесь. Спасибо заранее!
Что-то вроде
In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}
In [2]: sorted(d.items(), key=lambda x: (-x[1], x[0]))
Out[2]: [('apple', 5), ('orange', 5), ('banana', 3)]
Словарь не может быть отсортирован напрямую, поэтому вам нужно отсортировать элементы(), список кортежей, содержащих пары ключ/значение.
Поскольку вы хотите отсортировать по полю значения, затем по ключевым полям, необходимо извлечь это поле из кортежа для использования в качестве ключа сортировки с помощью operator.itemgetter
, который получает указанное поле.
Наконец, чтобы сортировать по убыванию в одном поле и спускаться по другому, выполните два прохода, сначала отсортируйте по второму ключу по возрастанию, а затем еще одну сортировку по первому спускающему ключу. Этот шаг основан на Python стабильности сортировки.
Например:
import operator
In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}
In [2]: fruit = sorted(d.items(), key=operator.itemgetter(0))
In [3]: sorted(fruit, key=operator.itemgetter(1), reverse=True)
Out[3]: [('apple', 5), ('orange', 5), ('banana', 3)]
Подробнее см. Python Sorting-HOWTO.