python - 如何根据加权概率从 python 字典中选择键?

标签 python random probability

<分区>

我有一个 Python 字典,其中键代表一些项目,值代表所述项目的一些(规范化)权重。例如:

d = {'a': 0.0625, 'c': 0.625, 'b': 0.3125}
# Note that sum([v for k,v in d.iteritems()]) == 1 for all `d`

鉴于项目与权重的这种相关性,我如何从 d 中选择一个键,使得 6.25% 的时间结果为“a”,32.25% 的时间结果为“b” ',结果的 62.5% 是 'c'?

最佳答案

def weighted_random_by_dct(dct):
    rand_val = random.random()
    total = 0
    for k, v in dct.items():
        total += v
        if rand_val <= total:
            return k
    assert False, 'unreachable'

应该可以解决问题。遍历每个键并保持运行总和,如果随机值(介于 0 和 1 之间)落在槽中,则返回该键

关于python - 如何根据加权概率从 python 字典中选择键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40927221/

相关文章:

python - Pandas groupby plot 给出了第一个 plot 两次

random - 设计一个随机数生成器

algorithm - 如何处理这个算法问题?

java - 如何使图形随机出现并在与另一个图形碰撞时消失?

c++ - 在c++中生成随机数

java - java 有没有办法随机猜测下一个数字?

mysql - 导入离线患者病历时根据年龄确定出生日期

python - 在 matplotlib 中调整单个子图的大小

python - 无法导入 BertTokenizer

php - 从 php 调用时 Python mysql 语句返回错误