You need to enable JavaScript to run this app. 基于双字典实现Python单行布尔标记对应分值累加计算
优惠活动
大模型
产品
解决方案
定价
更多

基于双字典实现Python单行布尔标记对应分值累加计算

单行计算风险属性总分的实现方案

完全可以通过单行代码实现和原多行if分支完全等价的统计逻辑,两种常用实现如下:

无额外依赖、鲁棒性最优的实现

直接使用生成器表达式配合内置sum函数即可,无需导入第三方工具:
score = sum(scores.get(attr, 0) * is_triggered for attr, is_triggered in data.items())

逻辑说明

  • Python中布尔值True等价于整数1,False等价于整数0,分值与布尔值相乘后,触发的属性会保留对应分值,未触发的属性会被乘0抵消
  • 使用scores.get(attr, 0)取分值,可避免因两个字典键不完全匹配触发KeyError,鲁棒性更强
  • 不依赖字典的键排列顺序,无论两个字典的键位置如何变动,都能正确匹配对应分值
    针对你给出的测试数据,运行该代码会直接得到结果500,和原多行逻辑计算结果完全一致。

要求使用itertools工具集的实现

如果必须使用itertools工具集,可借助itertools.compress的筛选能力实现计算,为了避免字典顺序差异导致的错配,需要先按分值字典的键顺序对齐布尔判定结果:

import itertools
score = sum(itertools.compress(scores.values(), (data.get(attr, False) for attr in scores.keys())))

这种写法的逻辑是:严格按照scores字典的键顺序,从data中取出对应属性的布尔判定结果,再通过compress保留所有判定为True的属性对应的分值,最后求和得到总分。
如果偷懒直接写sum(itertools.compress(scores.values(), data.values())),会强依赖两个字典的键插入顺序完全一致,在Python 3.7之前的版本可能直接出错,后续修改字典的键增删顺序也容易引发分值错配,不推荐这种简化写法。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 08:27:03