Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 随机抽取一份口述样本_Python_Dictionary_Random_Python 3.4 - Fatal编程技术网

Python 随机抽取一份口述样本

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

我正在使用一本大词典,出于某种原因,我还需要使用该词典中的随机小样本。如何获得这个小样本(例如长度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.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))