2015-02-20 2 views
0

У меня есть словарь, в котором хранятся слова и их частоты. Мне нужно получить отсортированный список из этого словаря. Слова должны быть отсортированы в порядке убывания числа вхождений в тексте и на той же частоте встречаемости - в лексикографическом порядке. Я использую этот код:Настройки сортировки Python 3

for items, quantity in sorted(D.items(), key=itemgetter(1,0), reverse=True): 
    print(items, quantity) 

, который производит этот выход:

damme 4 
van 3 
name 3 
is 3 
my 2 
hi 2 
claude 2 
bond 2 
your 1 
what 1 
jean 1 
james 1 

Слово правильно отсортированы в порядке убывания числа вхождений в тексте по убыванию, но слова с одинаковым числом появлений сортируются их обратным лексикографическим порядком. Как я могу это исправить?

ответ

2

Вместо использования reverse=True, вернуть отрицательные номера:

sorted(D.items(), key=lambda i: (-i[1], i[0])) 

как -4 сорта перед тем -3. Затем для связей используется передний лексикографический вид для ключей.

Демо:

>>> D = {'hi': 2, 'jean': 1, 'bond': 2, 'my': 2, 'what': 1, 'damme': 4, 'van': 3, 'claude': 2, 'name': 3, 'james': 1, 'your': 1, 'is': 3} 
>>> for item, quantity in sorted(D.items(), key=lambda i: (-i[1], i[0])): 
...  print(item, quantity) 
... 
damme 4 
is 3 
name 3 
van 3 
bond 2 
claude 2 
hi 2 
my 2 
james 1 
jean 1 
what 1 
your 1 
Смежные вопросы