Python 从字典中选择随机值

Python 从字典中选择随机值,python,dictionary,random,Python,Dictionary,Random,假设我有这本字典: dict = {'a': 100, 'b': 5, 'c': 150, 'd': 60}; 我使用此代码获得具有最大价值的密钥: most_similar = max(dic.iteritems(), key=operator.itemgetter(1))[0] 它返回'c' 但我想从前三个最大值中选择一个随机键。根据本词典,前三名为: c a d 它应该从中随机选择一个键。我该怎么做呢?如果您想找到前3个键,然后随机获得其中一个键,那么我建议使用and,如下所示 &g

假设我有这本字典:

dict = {'a': 100, 'b': 5, 'c': 150, 'd': 60};
我使用此代码获得具有最大价值的密钥:

most_similar = max(dic.iteritems(), key=operator.itemgetter(1))[0]
它返回
'c'

但我想从前三个最大值中选择一个随机键。根据本词典,前三名为:

c
a
d

它应该从中随机选择一个键。我该怎么做呢?

如果您想找到前3个键,然后随机获得其中一个键,那么我建议使用and,如下所示

>>> 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'

将根据传递给它的dictionary对象的值从dictionary中获取前三个值,然后我们随机选择其中一个返回值并仅返回其中的键。

获取具有三个最大值的键

>>> 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'

按降序值对字典排序,从结果的
列表中获取前三个对象,然后使用
随机。选择

>>> import random
>>> d = {'a': 100, 'b': 5, 'c': 150, 'd': 60}
>>> random.choice(sorted(d, reverse=True, key=d.get)[:3])
'c'

不要称它为dict,否则你会屏蔽内置函数。

那么,你想从字典中随机选择一个吗?还是从前3个键中预先存在的
列表中进行单个随机选择?或者你想找到前3个键,然后从中随机选择一个?我不想让人沮丧,但这个问题很容易通过结合和的答案来回答。结果我投了反对票,因为在我的书中,这构成了糟糕的研究工作。你能解释一下这个问题是如何区别于仅仅把这两个问题放在一起的吗?关于你之前对我的回答的评论:
最常见的
是否也需要做一些排序,这样两种解决方案的复杂度都是O(nlog(n))?那么'的答案呢?@ironfish也有相同的O(nlogn)复杂性。对于仅选取3个元素
而言,最常见的
应该更接近线性时间