我正在使用大型词典,由于某种原因,我还需要处理该词典中的少量随机样本。如何获得这个小样本(例如长度为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的构造方式,因此我无法预见任何未来的问题
给出您的示例:
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对象的对象,因此:
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,例如:
heapq
import heapq import random s = sum(heapq.nlargest(2, dy.values(), key=lambda L: random.random()))