以下是一个示例代码,用于按照每个类别的权重分配总量:
import random
def allocate_by_weight(categories, weights, total_amount):
# 获取类别的数量
num_categories = len(categories)
# 计算每个类别的权重总和
total_weight = sum(weights)
# 初始化分配结果字典
allocation = {}
# 遍历每个类别
for i in range(num_categories):
# 计算当前类别的分配量
allocation[categories[i]] = int(total_amount * weights[i] / total_weight)
# 处理分配量余下的部分
remaining_amount = total_amount - sum(allocation.values())
if remaining_amount > 0:
# 随机选择一个类别,并将剩余的分配量加到该类别上
random_category = random.choice(categories)
allocation[random_category] += remaining_amount
return allocation
# 测试示例
categories = ['A', 'B', 'C']
weights = [0.4, 0.3, 0.3]
total_amount = 1000
allocation_result = allocate_by_weight(categories, weights, total_amount)
print(allocation_result)
在上面的代码中,allocate_by_weight
函数接受三个参数:categories
表示类别列表,weights
表示每个类别的权重列表,total_amount
表示总量。
首先,函数计算每个类别的权重总和,并初始化一个空的分配结果字典。
然后,通过遍历每个类别,根据其权重比例计算分配量,并将结果存储在分配结果字典中。
最后,处理分配量余下的部分:如果还有剩余的分配量,则随机选择一个类别,并将剩余的分配量加到该类别上。
最后,返回分配结果字典。
在代码的最后部分,我们提供了一个测试示例:有3个类别,分别为'A'、'B'、'C',对应的权重为0.4、0.3、0.3,总量为1000。运行代码后,将输出分配结果字典。