Python在字典中获取带权重的随机值实现方式

  • Post category:Python

获取字典中带权重的随机值主要是使用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}$。