随机获取字典样本

发布于 2021-01-29 15:01:06

我正在使用大型词典,由于某种原因,我还需要处理该词典中的少量随机样本。如何获得这个小样本(例如长度为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的构造方式,因此我无法预见任何未来的问题

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    给出您的示例:

    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()))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看