python - 如何根据浮点值从字典中随机选择一个键

标签 python random probability

假设我有一个字典

{'option one': 5.0, 'option two': 5.0, 'option three': 10.0}

我如何根据上述概率随机选择一个 key (即选项一和选项二将有 25% 的概率被选中。选项 3 将有 50% 的概率被选中)

最佳答案

作为单行:

import random

random.seed(100)
d = {'option one': 5.0, 'option two': 5.0, 'option three': 10.0}
picked = random.choices(*zip(*d.items()))[0]
print(picked)
# option one

更多分割:

import random

random.seed(100)
d = {'option one': 5.0, 'option two': 5.0, 'option three': 10.0}
# Key-value pairs in dictionary
items = d.items()
# "Transpose" items: from key-value pairs to sequence of keys and sequence of values
values, weights = zip(*items)
# Weighted choice (of one element)
picked = random.choices(values, weights)[0]
print(picked)
# option one

注意random.choices (与 random.choice 不同,它提供了一个 weights 参数)是在 Python 3.6 上添加的。

关于python - 如何根据浮点值从字典中随机选择一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711139/

相关文章:

python - Tensorboard 标量绘图,横轴为纪元号

python - 如何将 Pandas 面板重新索引到 MultiIndex

c++ - std::mersenne_twister_engine 和随机数生成

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

BBC MicroBit 上的 Ada 随机数生成器

c - C 中的配对程序?

python - 我如何用 numpy 查找/替换这个数组?

python - Django REST Framework 不以 PUT 形式显示值

matlab - 如何根据数据计算条件概率

java - 模拟抛硬币三次,并打印出出现三反面的情况的百分比