如何将单ID特征提取函数改造为嵌套字典输出?
改造单ID特征提取函数为多ID版本的实现方案
你现有的函数已经能正常处理单个ID,要改成支持多ID的版本,核心思路就是外层加循环遍历所有目标ID,把每个ID的处理结果存入以ID为键的大字典里,具体步骤和代码如下:
关键修改点
- 调整函数参数:让它能接受单个ID或者多个ID的集合(列表/元组),先统一转成列表避免类型问题
- 复用原单ID处理逻辑:把原函数的核心逻辑抽成内部辅助函数,顺便修正原函数名字的拼写错误:
exctract→extract - 优化原逻辑冗余:用字典
get方法替代列表推导式查ID,更简洁高效;把重复的字符串拆分逻辑移到循环外,减少不必要的计算
修改后的完整代码
import re def extract_ft_def(ids): # 统一处理参数:单个ID转列表,可迭代对象直接用 if not isinstance(ids, (list, tuple)): ids = [ids] final_results = {} # 封装单个ID的处理逻辑 def process_single_id(id_): results = {} # 直接用get获取对应数据,默认空列表 text_list = names_t.get(id_, []) features_list = names_ft.get(id_, []) # 扁平化嵌套列表 text = [item for sublist in text_list for item in sublist] features = [item for sublist in features_list for item in sublist] for keyword in features: keyword_found = False for sentence in text: result = re.search(f'({keyword}): (.+)\n', sentence) if result: keyword_found = True results[result.group(1)] = result.group(2) break if not keyword_found: results[keyword] = None # 统一处理字符串拆分,只执行一次 results = {key: value.split(' - ')[-1] if value is not None else None for key, value in results.items()} return results # 遍历所有ID,生成嵌套结果字典 for id_ in ids: final_results[id_] = process_single_id(id_) return final_results
代码说明
- 参数兼容:不管传入单个ID(如
extract_ft_def("id001"))还是多个ID的列表(如extract_ft_def(["id001", "id002"])),函数都能正常处理 - 内部辅助函数:把原单ID的逻辑封装后,代码更清晰,也方便后续单独调整单ID的处理规则
- 结果结构:返回的
final_results是嵌套字典,键为目标ID,值为对应ID的特征-文本映射字典
内容的提问来源于stack exchange,提问作者ella
相关产品推荐
相关产品推荐

