小编典典

随机获取字典样本

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任务,我需要在代码中进行的唯一更改是:

s=0
for key in sam:
    s=s+dy[key]

关键是我不完全了解dy.keys的构造方式,因此我无法预见任何未来的问题


阅读 197

收藏
2021-01-20

共1个答案

小编典典

给出您的示例:

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()))
2021-01-20