如何按值对Python字典的键排序

25 投票
5 回答
36125 浏览
提问于 2025-04-16 02:23

我有一个字典,长得像这样:

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

我想把它按值从大到小排序,然后只提取出关键词,最后得到的结果应该是:

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

我看到的所有例子都用到了lambda函数,但我对这个不太熟悉。有没有办法让我自己循环遍历这个字典,并在遍历的过程中进行排序呢?谢谢大家的建议。

PS:如果有帮助的话,我可以换一种方式来创建这个字典。

5 个回答

2

我想出了这样的一个方法:

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

不过KennyTM的解决方案要好得多 :)

19

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这种时候,我们可以去一些技术论坛,比如StackOverflow,去寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。

如果你在论坛上看到一个代码块,比如

>>> d={ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
>>> sorted(d, key=d.get, reverse=True)
['keyword3', 'keyword1', 'keyword4', 'keyword2']
,这通常是用来展示某段代码的地方。你可以根据这些代码来理解问题的所在,或者学习如何解决类似的情况。

总之,技术论坛是一个很好的资源,可以让你在遇到困难时找到答案,学习新知识,和其他程序员交流经验。

45

你可以使用

res = list(sorted(theDict, key=theDict.__getitem__, reverse=True))

(在Python 2.x中,你不需要用到list

theDict.__getitem__ 实际上和 lambda x: theDict[x] 是一样的。

(lambda就是一个没有名字的函数。例如

>>> g = lambda x: x + 5
>>> g(123)
128

这和下面的内容是等价的

>>> def h(x):
...   return x + 5
>>> h(123)
128

撰写回答