У меня есть диктант, который выглядит так
{" keyword1 ": 3," keyword2 ": 1," keyword3 ": 5," keyword4 ": 2}
И я хотел бы преобразовать его в DESC и создать список только ключевых слов. Например, это вернется
["keyword3", "keyword1", "keyword4", "keyword2"]
Все примеры, которые я нашел, используют лямбду, и я не очень силен в этом. Есть ли способ, которым я мог бы пройти через это, и сортировать их по ходу ? Спасибо за любые предложения.
PS: Я мог бы создать первоначальный диктовку иначе, если бы это помогло.
Вы можете использовать
res = list(sorted(theDict, key=theDict.__getitem__, reverse=True))
(вам не нужен список
в Python 2.x)
theDict .__ getitem __
фактически эквивалентен лямбда x: theDict [x]
.
(Лямбда - это просто анонимная функция. Например,
>>> g = lambda x: x + 5
>>> g(123)
128
Это эквивалентно
>>> def h(x):
... return x + 5
>>> h(123)
128
)
Я всегда делал это так .... есть ли преимущества в использовании отсортированного метод?
keys = dict.keys()
keys.sort( lambda x,y: cmp(dict[x], dict[y]) )
упс, не читал, что не используется lambda = (
>>> d={ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
>>> sorted(d, key=d.get, reverse=True)
['keyword3', 'keyword1', 'keyword4', 'keyword2']
Я бы придумал что-то вроде этого:
[k for v, k in sorted(((v, k) for k, v in theDict.items()), reverse=True)]
Но решение KennyTM гораздо приятнее :)