Не получается отсортировать полученный после применения collections.Counter словари
Вот есть словари их нужно отсортировать, чтобы ключи шли в порядке возрастания если у них одинаковые значения, а далее значения должны убывать
c = Counter({'9': 22, '0': 22, '7': 21, '3': 20, '8': 18, '2': 17, '4': 14, '6': 14, '1': 14, '5': 10})
Будет вот такой
{'0': 22, '9': 22, '7': 21, '3': 20, '8': 18, '2': 17, '1': 14, '4': 14, '6': 14, '5': 10}
И с другим словарями тоже самое
Counter({'9': 27, '4': 27, '5': 24, '7': 22, '8': 20, '2': 19, '1': 19, '0': 17, '6': 16, '3': 14})
Counter({'4': 332, '2': 332, '5': 331, '8': 331, '3': 328, '6': 324, '9': 316, '1': 310, '0': 304, '7': 303})
Мои решения - сортирую по значению два раза потом reverse один вариант сортирую сперва по значению, а потом по ключу потом reverse другой вариант
c = sorted(sorted(c.items(), key=itemgetter(1)), key=itemgetter(1), reverse=True)c = sorted(sorted(c.items(), key=itemgetter(1)), key=itemgetter(0), reverse=True)
но в результате где получается сортировка, а где нет
Подскажите правильное решение!
Ответы (2 шт):
Сначала сортируем по ключам, потом по значениям.
c = sorted(sorted(c.items(), key=itemgetter(0)), key=itemgetter(1), reverse=True)
Т.к. сортировка устойчивая, пары, у которых значения совпадают, сохранят относительный порядок, заданный первой сортировкой. Т.е. пары с меньшими ключами, будут идти раньше пар с большими ключами, но теми же значениями.
Как вариант: сортировать одновременно и по значениям, и по ключам, а не сначала по одному, потом по другому.
Чтобы добиться обратного порядка сортировки значений, предлагается использовать унарный минус.
sorted(c.items(), key=lambda item: (-item[1], item[0]))