Как отсортировать ключи Python-диктов по значение

У меня есть диктант, который выглядит так

{" keyword1 ": 3," keyword2 ": 1," keyword3 ": 5," keyword4 ": 2}

И я хотел бы преобразовать его в DESC и создать список только ключевых слов. Например, это вернется

["keyword3", "keyword1", "keyword4", "keyword2"]

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

PS: Я мог бы создать первоначальный диктовку иначе, если бы это помогло.

21
задан Aran-Fey 23 March 2019 в 07:24
поделиться

4 ответа

Вы можете использовать

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

)

43
ответ дан 29 November 2019 в 06:29
поделиться

Я всегда делал это так .... есть ли преимущества в использовании отсортированного метод?

keys = dict.keys()
keys.sort( lambda x,y: cmp(dict[x], dict[y]) )

упс, не читал, что не используется lambda = (

2
ответ дан 29 November 2019 в 06:29
поделиться
>>> d={ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
>>> sorted(d, key=d.get, reverse=True)
['keyword3', 'keyword1', 'keyword4', 'keyword2']
18
ответ дан 29 November 2019 в 06:29
поделиться

Я бы придумал что-то вроде этого:

[k for v, k in sorted(((v, k) for k, v in theDict.items()), reverse=True)]

Но решение KennyTM гораздо приятнее :)

2
ответ дан 29 November 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: