78 lines
2.9 KiB
Python
Raw Normal View History

2024-08-29 16:37:09 +08:00
import json
2024-09-09 15:21:07 +08:00
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)