Python 随机抽取一份口述样本
我正在使用一本大词典,出于某种原因,我还需要使用该词典中的随机小样本。如何获得这个小样本(例如长度2) 这是一个玩具模型:Python 随机抽取一份口述样本,python,dictionary,random,python-3.4,Python,Dictionary,Random,Python 3.4,我正在使用一本大词典,出于某种原因,我还需要使用该词典中的随机小样本。如何获得这个小样本(例如长度2) 这是一个玩具模型: dy={'a':1, 'b':2, 'c':3, 'd':4, 'e':5} 我需要在dy上执行一些任务,其中包括所有条目。让我们说,为了简化,我需要将所有值相加: s=0 for key in dy.key: s=s+dy[key] 现在,我还需要对dy的随机样本执行相同的任务;为此,我需要一个dy键的随机样本。我能想象的简单解决方案是 sam=list(dy
dy={'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
我需要在dy上执行一些任务,其中包括所有条目。让我们说,为了简化,我需要将所有值相加:
s=0
for key in dy.key:
s=s+dy[key]
现在,我还需要对dy的随机样本执行相同的任务;为此,我需要一个dy键的随机样本。我能想象的简单解决方案是
sam=list(dy.keys())[:1]
这样,我就有了一个字典的两个键的列表,它们在某种程度上是随机的。因此,回到may task,我需要对代码进行的唯一更改是:
s=0
for key in sam:
s=s+dy[key]
关键是我不完全理解dy.keys是如何构造的,因此我无法预见将来会出现任何问题,因为您的示例如下:
dy = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
然后,所有值的总和更简单地表示为:
s = sum(dy.values())
然后,如果不是内存限制,您可以使用以下方法进行采样:
import random
values = list(dy.values())
s = sum(random.sample(values, 2))
或者,由于random.sample
可以获取一个set
类对象,那么:
from operator import itemgetter
import random
s = sum(itemgetter(*random.sample(dy.keys(), 2))(dy))
或者直接使用:
s = sum(dy[k] for k in random.sample(dy.keys(), 2))
另一种方法是使用heapq
,例如:
import heapq
import random
s = sum(heapq.nlargest(2, dy.values(), key=lambda L: random.random()))
用numphy的一些随机样本替换范围(10)
{v:rows[v]代表[list(rows.keys())[k]代表范围(10)]中的k}
输出:
{'d': 4, 'c': 3}
这应该比创建新dict并检查键是否是示例的一部分要快:
import random
sample_n = 1000
output_dict = dict(random.sample(input_dict.items(), sample_n))
为什么不通过random.sample创建一个列表呢?使用itemgetter有什么好处?@user2988577
itemgetter
有时会更快-否则-只需将其写成sum(dy[k]表示随机的k.sample(dy.keys(),2))
感谢您提供了这个代码片段,它可能会提供一些有限的即时帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
def sample_from_dict(d, sample=10):
keys = random.sample(list(d), sample)
values = [d[k] for k in keys]
return dict(zip(keys, values))
import random
sample_n = 1000
output_dict = dict(random.sample(input_dict.items(), sample_n))