假设我有这个字典:
dict = {'a': 100, 'b': 5, 'c': 150, 'd': 60};
使用以下代码获取具有最大值的密钥:
most_similar = max(dic.iteritems(), key=operator.itemgetter(1))[0]
它返回'c'
但我想从前三个最大值中随机选择一个键。根据这个字典,前三个最大值是:
c
a
d
它应该从它们中随机选择一个键。我该如何做到这一点?
假设我有这个字典:
dict = {'a': 100, 'b': 5, 'c': 150, 'd': 60};
使用以下代码获取具有最大值的密钥:
most_similar = max(dic.iteritems(), key=operator.itemgetter(1))[0]
它返回'c'
但我想从前三个最大值中随机选择一个键。根据这个字典,前三个最大值是:
c
a
d
如果您想找到前三个键,然后随机获取其中一个键,则建议使用 random.choice
和 collections.Counter
,代码如下:
>>> d = {'a': 100, 'b': 5, 'c': 150, 'd': 60}
>>> from collections import Counter
>>> from random import choice
>>> choice(Counter(d).most_common(3))[0]
'c'
Counter(d).most_common(3)
将基于传递给它的字典对象的值获取前三个最大值,然后我们随机选择其中一个返回值并仅返回其键。
most_common
不也需要进行一些排序,使得两种解决方案的复杂度都是 O(nlog(n)) 吗? - timgeb>>> import heapq
>>> d = {'a': 100, 'b': 5, 'c': 150, 'd': 60}
>>> largest = heapq.nlargest(3, d, key=d.__getitem__)
>>> largest
['c', 'a', 'd']
然后随机选择其中一个:
>>> import random
>>> random.choice(largest)
'c'
将字典按值的降序排序,从结果列表中获取前三个对象,然后使用random.choice
:
>>> import random
>>> d = {'a': 100, 'b': 5, 'c': 150, 'd': 60}
>>> random.choice(sorted(d, reverse=True, key=d.get)[:3])
'c'
dict
,否则会掩盖内置的内容。