Python 在字典中查找最大值的基本方法

Python 在字典中查找最大值的基本方法,python,dictionary,max,Python,Dictionary,Max,假设我有一本字典。我想找到具有最高值的4个键。我想用一种非常基本的方式来做这件事。我的CS没有那么先进。我只想反复浏览一下字典。或者我该怎么做?我意识到这不可能有那么大的挑战性。我不想用heapq。我该怎么做 我认为最具python风格的方式是: sorted(d, key=d.get, reverse=True)[:4] 按值排序,然后切片。sorted函数采用键函数 items_by_value = sorted(d.items(), key=lambda (k, v): v) keys

假设我有一本字典。我想找到具有最高值的4个键。我想用一种非常基本的方式来做这件事。我的CS没有那么先进。我只想反复浏览一下字典。或者我该怎么做?我意识到这不可能有那么大的挑战性。我不想用heapq。我该怎么做

我认为最具python风格的方式是:

sorted(d, key=d.get, reverse=True)[:4]

按值排序,然后切片。
sorted
函数采用键函数

items_by_value = sorted(d.items(), key=lambda (k, v): v) 
keys = [k for k, v in items_by_value[-4:]]

您应该使用
集合。计数器
对象

c = collections.Counter(original_dict)
c.most_common(4)
如果您只是想要钥匙,那么:

[k for k, v in c.most_common(4)]
有关如何实现的参考,请查看源代码。

好问题

假设
d
是字典,如果您不关心键的顺序,可以使用以下内容:

keys = [v[0] for v in sorted(d.items(), key=lambda v: v[1])[-4:]]
对于大型词典而言,使用以下工具将更有效:

keys = [v[0] for v in sorted(d.items(), key=operator.itemgetter(1))[-4:]]

[-4:][/code>表示最后四个条目。在这两种情况下,如果您希望键的顺序与其对应的最高值相同,请使用
[-1:-5:-1]
,这是按相反顺序排列的最后四个条目。

最高值是什么意思?最高的数字?最大长度?你关心最高值返回的顺序吗?@martineau我不关心它们返回的顺序in@martineau我只需要尽可能以最基本的方式进行排序(d,key=d.get)[-4:]
会更短……我认为这肯定比我的好,不过,我想我会作出一项修订。我不喜欢通过简单地迭代
dict
,来迭代
dict
——我认为隐式行为总是让人困惑。我更喜欢使用更显式的
排序(d.keys(),key=d.get…
使用
d.get()
O(n)
解决方案更不理想。为什么不只是迭代项目?在collection.Counter上使用的解决方案。最常见的是排序(self.items(),key=itemgetter(1),reverse=True)@jwilner我有点明白你的意思。你能告诉我这个修正案会是什么样子吗?@jwilner问题是它在Python2.x上是浪费的,不必要地在内存中复制一个稍后将被垃圾收集的列表。无论如何,dicts在键上迭代应该是python的常识,我认为。@Shashank您可以使用
计数器
计算任何东西。自己试试代码。而且这是非常干净的回,它的工作:)好把戏!它在背景中使用heapq