如何基于已计算的产品销售占比字典筛选贡献总销售额80%的Top产品
筛选累计贡献80%头部产品的实现逻辑
核心思路是按单产品贡献占比从高到低排序后逐个累加,直到累计值触达80%的阈值为止。
先提个容易踩的坑:你当前代码里计算的是销量占比(用
product.quantity / total_quantity计算),如果目标是筛选销售额贡献Top80%的产品,这里必须替换成对应销售额字段计算,即把占比计算逻辑改成product.sale_amount / total_sale_amount * 100,否则最终结果会和目标完全不匹配。
操作步骤
- 将已有
product_dict按值(单产品贡献占比)做降序排序 - 初始化累计占比变量、结果存储列表
- 遍历排序后的产品列表,逐个累加单产品占比,直到累计值触达80%阈值
可直接运行的代码
# 按销售占比从高到低排序所有产品 sorted_product_list = sorted( product_dict.items(), key=lambda item: item[1], # 以单产品占比作为排序依据 reverse=True # 降序排列,从贡献最高的产品开始排序 ) cumulative_percent = 0 # 记录当前累计的销售占比 top_products = [] # 存储最终筛选出的头部产品 TARGET_THRESHOLD = 80 # 设定80%的累计贡献目标 # 逐个累加计算 for product, single_percent in sorted_product_list: # 如果加入当前产品后累计占比仍不超过阈值,直接纳入结果 if cumulative_percent + single_percent <= TARGET_THRESHOLD: top_products.append(product) cumulative_percent += single_percent else: # 业务上如果需要把"刚好把累计值推过80%的那款产品"也纳入结果,取消下面两行注释即可 # top_products.append(product) # cumulative_percent += single_percent break # 打印验证结果 print(f"筛选出的头部产品共{len(top_products)}款,累计贡献占比{cumulative_percent}%")
注意事项
- 排序步骤不能省:如果不按贡献从高到低做累计,最终凑出来的80%占比结果会混入大量低贡献产品,根本不是要找的Top产品
- 边界逻辑可灵活调整:如果业务要求累计占比严格不超过80%,用默认代码逻辑即可;如果要求包含最后一个跨过阈值的产品,按注释提示打开对应代码就行
- 你当前存储的
product_dict结构不需要额外修改,直接就能跑通上述逻辑
内容的提问来源于stack exchange,提问作者Chaban33
相关产品推荐
相关产品推荐

