获取字典中带权重的随机值主要是使用Python内置模块random
来实现。以下是完整攻略:
1. 带权重的随机值实现方式
将字典中的键作为值,将权重作为键构成一个字典。然后利用random
模块中的choices
函数对该字典的值进行随机抽样,其中weights
参数用于指定抽样时值的权重。
完整代码如下:
import random
# 构造字典,键为值,值为权重
items = {'a': 2, 'b': 3, 'c': 5}
# 获取带权重的随机值
random_item = random.choices(list(items.keys()), weights=list(items.values()), k=1)
print("随机获取带权重的值为:{}".format(random_item[0]))
上述代码中,random.choices()
函数返回一个列表,由于本例中仅需要获取随机值一个元素,因此使用索引取值即可。
2. 示例说明
以下举两个带权重的随机值实现方式的示例说明:
示例 1
假设有一个商品列表,每个商品对应不同的销量,需要随机推荐给用户某个商品,推荐的概率要考虑商品销量的不同。构造的商品列表如下:
items = {'a': 100, 'b': 200, 'c': 300, 'd': 400}
根据销量构造权重字典,并利用choices
方法实现随机抽取。
import random
# 构造字典,键为值,值为权重
items = {'a': 100, 'b': 200, 'c': 300, 'd': 400}
# 获取带权重的随机值
random_item = random.choices(list(items.keys()), weights=list(items.values()), k=1)
print("随机获取的带权重的商品为:{}".format(random_item[0]))
运行结果如下:
随机获取的带权重的商品为:d
根据权重的比例,d被随机选中的概率最大,b、c和a被选中的概率分别为$\frac{2}{13}$、$\frac{3}{13}$和$\frac{4}{13}$。
示例 2
假设有一个投票系统,有三个选项,分别为A、B和C,每个选项对应的票数不同。需要实现随机选出一个选项,并且选项出现的概率要考虑票数的不同。构造的选项列表如下:
items = {'A': 10, 'B': 20, 'C': 30}
根据票数构造权重字典,并利用choices
方法实现随机抽取。
import random
# 构造字典,键为值,值为权重
items = {'A': 10, 'B': 20, 'C': 30}
# 获取带权重的随机值
random_item = random.choices(list(items.keys()), weights=list(items.values()), k=1)
print("随机获取的带权重的选项为:{}".format(random_item[0]))
运行结果如下:
随机获取的带权重的选项为:C
根据权重的比例,C被随机选中的概率最大,B被选中的概率为$\frac{2}{6}$,A被选中的概率为$\frac{1}{6}$。