Python 在字典中查找最大值的基本方法
假设我有一本字典。我想找到具有最高值的4个键。我想用一种非常基本的方式来做这件事。我的CS没有那么先进。我只想反复浏览一下字典。或者我该怎么做?我意识到这不可能有那么大的挑战性。我不想用heapq。我该怎么做 我认为最具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
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