Сортировка словаря по значению, а затем ключ - PullRequest
25 голосов
/ 29 марта 2012

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

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

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

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

Пока я знаю, как это сделать:

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

С помощьювывод: ['almond', 'apple', 'banana', 'beetroot', 'peach']

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

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

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

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

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

Ответы [ 3 ]

39 голосов
/ 29 марта 2012

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

>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']
5 голосов
/ 29 марта 2012

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

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (-v,k))]
1 голос
/ 29 марта 2012
>>> 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...