如何用Python计算非固定字典内各笔记本品牌分值的百分比
你已完成all_brands_scores字典按分值升序排序的逻辑,当前排序后的字典输出如下:
{'ADATA': 0, 'GIGABYTE': 0, 'CyberPowerPC': 0, 'Hyundai': 0,
'Thomson': 0, 'KANO': 1, 'Alienware': 1, 'Razer': 1, 'Google': 1,
'LG': 2, 'HP OMEN': 5, 'Acer': 12, 'Apple': 13, 'Microsoft': 13,
'MSI': 17, 'Samsung': 18, 'Dell': 24, 'ASUS': 54, 'Lenovo': 71, 'HP':
104}
由于字典内各品牌的分值为动态非固定值,可按如下逻辑计算每个品牌分值的百分比占比:
- 先计算全量品牌的分值总和
- 遍历排序后的字典,逐个计算单品牌分值占总分的比例,换算为百分比即可
可直接运行的代码
# 原有按分值升序排序逻辑 all_brands_scores = dict(sorted(all_brands_scores.items(), key=lambda item: item[1])) # 计算所有品牌分值总和 total_score = sum(all_brands_scores.values()) # 遍历计算各品牌分值占比,结果保留2位小数;增加总分非0判断避免极端场景除零报错 brand_score_ratio = { brand: round(score / total_score * 100, 2) if total_score != 0 else 0 for brand, score in all_brands_scores.items() } # 打印占比结果 print(brand_score_ratio)
逻辑说明
- 直接通过
sum(all_brands_scores.values())动态计算总分,无需手动累加,完全适配分值动态变化的场景 - 字典推导式遍历过程中自动保留原有排序结果,输出的占比字典和原排序后的字典顺序一致
- 分值为0的品牌会自动计算得到0%的占比,不会出现计算错误
round()的第二个参数为百分比保留的小数位数,可根据业务需求自行调整
基于你给出的示例数据,上述代码运行后输出的占比结果如下:
{'ADATA': 0.0, 'GIGABYTE': 0.0, 'CyberPowerPC': 0.0, 'Hyundai': 0.0, 'Thomson': 0.0, 'KANO': 0.28, 'Alienware': 0.28, 'Razer': 0.28, 'Google': 0.28, 'LG': 0.56, 'HP OMEN': 1.4, 'Acer': 3.37, 'Apple': 3.65, 'Microsoft': 3.65, 'MSI': 4.78, 'Samsung': 5.06, 'Dell': 6.74, 'ASUS': 15.17, 'Lenovo': 19.94, 'HP': 29.21}
内容的提问来源于stack exchange,提问作者mohamad jumaa

