当前位置: 首页 > 面试题库 >

随机获取字典样本

姚伟
2023-03-14
问题内容

我正在使用大型词典,由于某种原因,我还需要处理该词典中的少量随机样本。如何获得这个小样本(例如长度为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对象的对象,因此:

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


 类似资料:
  • 问题内容: 或者我必须使用简单的方法,例如: 问题答案: 您所做的是干净,快速的。您可以改进的是预分配切片,并使用如下循环填充它: 该封装还具有填充用随机字节切片功能。因此,如果您想用随机数据填充一个切片,这就是所有必要的工作: 另一个有趣的方法是利用成为一个。这意味着它具有一种用随机数据填充的方法。 结合软件包,您可以用随机数据“填充”变量。创建a 并将其作为源传递给函数,仅此而已。 它是这样的

  • 我在MongoDB中存储了10万条推文。每条推文的存储方式如下: 我找到了http://bdadam.com/blog/finding-a-random-document-in-mongodb.htmlMongoDB:如何在100个集合中找到10个随机文档?但不确定这是否正是我需要的。 我想获得200个随机字段,以便进行分析。

  • 问题内容: 我想在Java中获得1到50之间的随机值。 在的帮助下,我该怎么办;? 如何绑定返回的值? 问题答案: 第一种解决方案是使用类: 另一种解决方案是使用: 要么

  • 问题内容: 我有一本字典,其中每个键都有一个可变长度的列表,例如: 是否有一种干净的方法来获取随机字典密钥,并对其值的长度进行加权? 会平均分配按键的权重,但在上述情况下,我希望大约一半的时间返回。 问题答案: 这将工作:

  • 从数组中随机返回一个元素。 使用 Math.random() 生成一个随机数,乘以 length,并使用 Math.floor() 舍去小数获得到最接近的整数。这个方法也适用于字符串。 const sample = arr => arr[Math.floor(Math.random() * arr.length)]; sample([3, 7, 9, 11]); // 9

  • 问题内容: 我有一个生成事实的简单应用。我想合并一个生成随机事实而不是递减的函数。 我的数组看起来像这样。 问题答案: 使用随机类。该类有一个方法,(doc)和引号: 返回一个伪随机数,它从此随机数生成器的序列中提取,在0(含)和指定值(不含)之间均匀分布的int值。nextInt的一般约定是伪随机生成并返回指定范围内的一个int值。所有n个可能的int值均以(近似)相等的概率产生。 因此,您需要