获取di的随机样本

2024-05-19 23:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用一本大字典,出于某种原因,我还需要从字典中随机抽取一些小样本。我怎样才能得到这个小样本(例如长度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是如何构造的,因此我无法预见任何未来的问题


Tags: keyin模型目的列表for字典sam
3条回答

range(10)替换为一些来自numphy的随机样本

{v:rows[v] for v in [list(rows.keys())[k] for k in range(10)]}

以你的例子:

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()))
import random
origin_dict =  {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
sample_rate = 0.3
random_keys = random.sample(list(origin_dict.keys()), int(sample_rate * len(origin_dict)))
random_values = [origin_dict[k] for k in random_keys]

sample_dict = dict(zip(random_keys, random_values))

输出:

{'d': 4, 'c': 3}

相关问题 更多 >