Подтвердить что ты не робот

Сортировка словаря по значению, затем клавиша

Я могу сортировать по ключу или значению, но мне нужно его сортировать по значению, а затем - в одной строке. Чтобы лучше объяснить это, я могу показать свою проблему:

dict = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4}

Я хочу, чтобы мой результат сортировался по их значению, а затем по возрастанию (A-Z) по их ключу (в алфавитном порядке). Результат в таком списке:

С выходом: ['peach', 'banana', 'beetroot', 'almond', 'apple']

Единственный способ, которым я знаю, сделать это до сих пор:

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k))]

С выходом: ['almond', 'apple', 'banana', 'beetroot', 'peach']

Таким образом, он отсортировал значения в порядке возрастания и клавиши в алфавитном порядке в порядке возрастания (A-Z). Поэтому, если я отменил это:

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k), reverse=True)]

С выходом: ['peach', 'beetroot', 'banana', 'apple', 'almond']

Он отсортировал значения в порядке убывания и клавиши в алфавитном порядке в порядке убывания (Z-A).

Есть ли способ сортировать значения в порядке убывания и ключи в порядке возрастания (т.е. A-Z) и получить результат, который я показал выше?

4b9b3361

Ответ 1

Вам нужно воспользоваться тем, что значения - это числа.

>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']

Ответ 2

Сортировка по убыванию значения для отрицательных величин сортируется по возрастанию отрицательного значения.

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (-v,k))]

Ответ 3

>>> d = {'apple':2, 'banana':3, 'almond':2, 'beetroot':3, 'peach':4}
>>> [k for k, v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']