Python 如何通过值从dict中获取键的顶部?

Python 如何通过值从dict中获取键的顶部?,python,Python,我有一本字典: { "key1" : 1, "key2" : 2, ...., "key100" : 100 } [ "key100", "key99",.. "key95" ] 我想从此字典中按排序值获取前5个键的列表: { "key1" : 1, "key2" : 2, ...., "key100" : 100 } [ "key100", "key99",.. "key95" ] 如何操作?只需使用lambda函数对键进行排序,将值作为键返回,并反转,然后取前5个值: d={ "ke

我有一本字典:

{ "key1" : 1, "key2" : 2, ...., "key100" : 100 }
[ "key100", "key99",.. "key95" ]
我想从此字典中按排序值获取前5个键的列表:

{ "key1" : 1, "key2" : 2, ...., "key100" : 100 }
[ "key100", "key99",.. "key95" ]

如何操作?

只需使用lambda函数对键进行排序,将值作为键返回,并反转,然后取前5个值:

d={ "key1" : 1, "key2" : 2, "key3" : 3, "key200" : 200 , "key100" : 100 , "key400" : 400}


print(sorted(d.keys(),reverse=True,key=lambda x : d[x] )[:5])
输出:

['key400', 'key200', 'key100', 'key3', 'key2']

这将为您提供具有最大5个值的列表。这就是你想要的吗?

你说的“前五名”是什么意思?具有最高值的键?还是最后五把钥匙?如果是后者,那么您就不能这样做,因为在Python中无法保证dict的顺序。您可以使用dictionary comprehensionworks返回每个值,也可以返回一个新的字典。但是,在一个大列表中,它很笨拙,而且性能非常差。@Jean Françoisfab有什么方法可以提高性能吗?我可以使用列表理解吗?列表理解从来都不是降低复杂性的方法。问题是,您首先对值进行排序,然后针对每个值按索引查找键:对于每个元素,此搜索是
O(n)
。我使用了基于最快值的排序标准。
Python 2.7.10 (default, Oct 23 2015, 19:19:21)

>>> d = {"key1": 1, "key2": 2, "key3": 3, "key98": 98 , "key99": 99 , "key100": 100}

>>> sorted(d, reverse=True, key=d.get)[:3]
['key100', 'key99', 'key98']