Как сортировать Python dict по значению
У меня есть dict, который выглядит как
{ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
И я хотел бы преобразовать его в DESC и создать список только ключевых слов. Например, это вернет
["keyword3" , "keyword1" , "keyword4" , "keyword2"]
Все примеры, которые я нашел, используют лямбда, и я не очень уверен в этом. Есть ли способ, которым я мог бы пройти через это, и сортировать их, когда я иду? Спасибо за любые предложения.
PS: Я мог бы создать исходный dict по-разному, если бы это помогло.
Ответы
Ответ 1
Вы можете использовать
res = list(sorted(theDict, key=theDict.__getitem__, reverse=True))
(Вам не нужен list
в Python 2.x)
theDict.__getitem__
фактически эквивалентен lambda x: theDict[x]
.
(Лямбда - это просто анонимная функция. Например
>>> g = lambda x: x + 5
>>> g(123)
128
Это эквивалентно
>>> def h(x):
... return x + 5
>>> h(123)
128
)
Ответ 2
>>> d={ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
>>> sorted(d, key=d.get, reverse=True)
['keyword3', 'keyword1', 'keyword4', 'keyword2']
Ответ 3
Я всегда делал это так... есть ли преимущества в использовании отсортированного метода?
keys = dict.keys()
keys.sort( lambda x,y: cmp(dict[x], dict[y]) )
whoops did not читает часть о том, что не использует lambda = (
Ответ 4
Я бы придумал что-то вроде этого:
[k for v, k in sorted(((v, k) for k, v in theDict.items()), reverse=True)]
Но решение KennyTM намного приятнее:)
Ответ 5
Невозможно отсортировать dict, только чтобы получить представление сортировки dict. Дикты по своей сути беспартийны, но другие типы, такие как списки и кортежи, не являются. Поэтому вам нужно отсортированное представление, которое будет списком, вероятно, списком кортежей. Например,
'''
Sort the dictionary by score. if the score is same then sort them by name
{
'Rahul' : {score : 75}
'Suhas' : {score : 95}
'Vanita' : {score : 56}
'Dinesh' : {score : 78}
'Anil' : {score : 69}
'Anup' : {score : 95}
}
'''
import operator
x={'Rahul' : {'score' : 75},'Suhas' : {'score' : 95},'Vanita' : {'score' : 56},
'Dinesh' : {'score' : 78},'Anil' : {'score' : 69},'Anup' : {'score' : 95}
}
sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1))
print sorted_x
Выход:
[('Vanita', {'score': 56}), ('Anil', {'score': 69}), ('Rahul', {'score': 75}), ('Dinesh', {' оценка ': 78}), (' Anup ', {' score ': 95}), (' Suhas ', {' score ': 95})]