import json def combine_technical_and_business(data, target_values1, target_values2): extracted_data = {} # 根级别存储所有数据 technical_found = False business_found = False def extract_nested(data, parent_key='', is_technical=False, is_business=False): nonlocal technical_found, business_found if isinstance(data, dict): for key, value in data.items(): current_key = f"{parent_key}.{key}" if parent_key else key # 检查是否为技术标的内容 if any(target in key for target in target_values1): if not is_technical: # 直接存储在根级别 extracted_data[key] = value technical_found = True # 标记为技术标内容并停止进一步处理这个分支 continue # 检查是否为商务标的内容 elif any(target in key for target in target_values2): if not is_business: # 存储在'商务标'分类下 if '商务标' not in extracted_data: extracted_data['商务标'] = {} extracted_data['商务标'][key] = value business_found = True # 标记为商务标内容并停止进一步处理这个分支 continue # 如果当前值是字典或列表,且不在技术或商务分类下,继续递归搜索 if isinstance(value, dict) or isinstance(value, list): extract_nested(value, current_key, is_technical, is_business) elif isinstance(data, list): for index, item in enumerate(data): extract_nested(item, f"{parent_key}[{index}]", is_technical, is_business) # 开始从顶级递归搜索 extract_nested(data) # 处理未找到匹配的情况 if not technical_found: extracted_data['技术标'] = '' if not business_found: extracted_data['商务标'] = '' return extracted_data # 示例数据和调用代码 data = { "商x务": { "投标报价": {"方案": "详细报价"}, "合同条款": {"期限": "一年"} }, "商x务标": { "商务": {"商务x标": "商业方案"}, "商务条款": {"期限": "一年"} }, "技x术标": { "技术要求": [{"性能指标": "高性能"}, {"分值": "6"}] }, "投标x报价细节": { "价格": "100万元", "条件": "包运费" } } target_values2 = ["商务标", "投标报价"] target_values1 = ['技术标', '设计', '实施', '方案'] result = combine_technical_and_business(data, target_values1, target_values2) evaluation_combined_res = json.dumps(result, ensure_ascii=False, indent=4) print(evaluation_combined_res)