2015-12-25 2 views
1

Im пытается разобраться словарь по значениям, и я видел этот пост: Sort a Python dictionary by valueкак представлять отсортированный словарь?

мне нужно получить только ключ, которые имеют самые большие значения в списке, а не в кортеже, так что я написал это (что выглядят немного неуклюжими). НО, если у 2 ключей было такое же значение, мне нужно отсортировать их по алфавиту.

это то, что я пытался сделать:

import operator 
final_sort=[] 
sorted_x = sorted(x.items(), key=operator.itemgetter(1)) 
for item in sorted_x[::-1]: 
    final_sort.append(item[0]) 

, но это хорошо только для состояния номера значений.

, например:

inp : x = {'a': 2, 'b': 4, 'c': 6, 'd': 6, 'e': 0} 
out : ['c', 'd', 'b', 'a', 'e'] 
+0

Можете ли вы привести пример вашего Dict и выход ожидать? –

+0

да Я добавил пример. спасибо – limitless

ответ

2

Итерация словаря Урожайность ключи; вы можете передать сам словарь до sorted.

>>> x = {'a': 2, 'b': 4, 'c': 6, 'd': 6, 'e': 0} 
>>> sorted(x, key=lambda key: (-x[key], key)) 
['c', 'd', 'b', 'a', 'e'] 
+1

Это только сортирует по значению, в то время как задает вопрос «НО, если у 2 ключей было такое же значение, мне нужно отсортировать их по алфавиту». Поскольку порядок словаря произволен, текущие '' c ',' d''не гарантируются. – TigerhawkT3

+2

@ TigerhawkT3, Спасибо за комментарий. Я соответствующим образом обновил ответ. – falsetru

+0

Большое спасибо. @ TigerhawkT3 спасибо за ссылку, это было то, что я спросил! в любом случае ответ thos лучше для python 3, который не позволял мне распаковывать кортеж, как будто это сделал другой пост. – limitless

0

Вот мой принять, в 2 шагах

>>> x = {'a': 2, 'b': 4, 'c': 6, 'd': 6, 'e': 0} 
>>> sorted(x.items(), key=lambda i: i[1], reverse=True) 
[('c', 6), ('d', 6), ('b', 4), ('a', 2), ('e', 0)] 
>>> [x[0] for x in sorted(x.items(), key=lambda i: i[1], reverse=True)] 
['c', 'd', 'b', 'a', 'e'] 
+0

Это только сортирует по значению, в то время как в вопросе указывается «НО, если у 2 ключей было такое же значение, мне нужно сортировать их по алфавиту». Поскольку порядок словаря произволен, текущие '' c ',' d''не гарантируются. – TigerhawkT3

Смежные вопросы