Python嵌套字典中计算多层级需求及其子需求平均得分的方法
多级需求得分计算实现方案
适配嵌套字典结构的实现方案
核心逻辑采用递归自底向上计算,先完成所有子级需求的得分计算,再推导父级得分,完全匹配给定的评分规则。
代码实现(Python)
def calculate_requirement_points(req_node): # 无直属子需求:为末级节点,直接返回提前人工录入的0/1得分 if not req_node['subrequeriments']: # 空值默认设为0,可根据实际业务调整规则 req_node['points'] = float(req_node['points']) if req_node['points'] else 0.0 return req_node['points'] # 有直属子需求:递归计算所有子节点得分,再求平均值作为当前节点得分 sub_points_sum = 0.0 sub_count = len(req_node['subrequeriments']) for sub_node in req_node['subrequeriments'].values(): sub_points_sum += calculate_requirement_points(sub_node) # 得分保留2位小数,可按需调整精度 req_node['points'] = round(sub_points_sum / sub_count, 2) return req_node['points'] # 全局计算入口 def calc_all_points(req_data): for top_node in req_data['requeriments'].values(): calculate_requirement_points(top_node) return req_data
使用示例
提前给所有末级需求的points字段赋值0或1,调用入口函数即可自动回填所有层级父需求的得分:
# 测试数据示例:给3.1、3.3、5.2.1.1赋值1分,3.2赋值0分 test_data = { 'requeriments':{ '1':{'points':'', 'subrequeriments': {}}, '2':{'points':'', 'subrequeriments': {}}, '3':{'points':'', 'subrequeriments': { '3.1':{'points':'1', 'subrequeriments': {} }, '3.2':{'points':'0', 'subrequeriments': {} }, '3.3':{'points':'1', 'subrequeriments': {} } }}, '4':{'points':'', 'subrequeriments': {}}, '5':{'points':'', 'subrequeriments': { '5.1':{'points':'', 'subrequeriments': {} }, '5.2':{'points':'', 'subrequeriments': { '5.2.1':{'points':'', 'subrequeriments': { '5.2.1.1':{'points':'1', 'subrequeriments': {} } }} }}, '5.3':{'points':'', 'subrequeriments': {} } }}, '6':{'points':'', 'subrequeriments': {}} } } result = calc_all_points(test_data) # 输出结果:3的得分为(1+0+1)/3≈0.67,5.2的得分为1 print(result['requeriments']['3']['points']) print(result['requeriments']['5']['subrequeriments']['5.2']['points'])
平表/Excel结构的实现思路
如果原始数据是Excel导出的平级列表(每行对应一个需求,包含需求编号、得分两列),可按以下步骤处理:
- 提取所有需求编号,按编号的层级深度倒序排序(编号的段数越多层级越深,比如
5.2.1.1是4段,优先级高于3段的5.2.1) - 建立需求编号到得分的映射表
- 按倒序遍历所有需求:
- 末级需求(没有其他需求的编号前缀等于当前编号),直接取人工录入的0/1得分
- 父级需求,找到所有编号以它为前缀的直属子需求,计算平均得分存入映射表
- 遍历完成后把映射表的得分回填到原表格即可
内容的提问来源于stack exchange,提问作者Juan049
相关产品推荐
相关产品推荐

