Python中检查字典值是否为其他键值对值的子串问题求助
解决方案:查找字典中包含指定键值子串的键值对
需求梳理
- 从字典
disease_dict中匹配不区分大小写的指定键(如Stroke/stroke、Glaucoma/glaucoma),获取其对应的ID列表 - 遍历字典中其他键,检查它们的列表值里是否存在包含上述ID作为子串的元素,收集所有符合条件的键值对
示例字典
disease_dict = { 'Stroke': ['C10.228.140.300.775', 'C14.907.253.855'], 'Stroke, Lacunar': ['C10.228.140.300.275.800', 'C10.228.140.300.775.600', 'C14.907.253.329.800', 'C14.907.253.855.600'], 'Glaucoma': ['H01.111.220'], 'Primary Open-Angle Glaucoma': ['H01.111.220.120'] }
改进后的代码实现
# 定义要匹配的目标术语(不区分大小写) target_terms = {'stroke', 'glaucoma'} # 收集目标术语对应的所有ID target_ids = [] for key, ids in disease_dict.items(): if key.lower() in target_terms: target_ids.extend(ids) # 收集所有符合条件的键值对(包含目标ID子串的非目标键) matching_pairs = {} for key, ids in disease_dict.items(): # 跳过目标键本身 if key.lower() in target_terms: continue # 检查当前键的每个ID是否包含任意目标ID作为子串 matched_ids = [id_str for id_str in ids if any(target_id in id_str for target_id in target_ids)] if matched_ids: matching_pairs[key] = matched_ids # 输出结果 print("目标术语对应的ID:") print(target_ids) print("\n包含目标ID子串的键值对:") for k, v in matching_pairs.items(): print(f"{k}: {v}")
代码说明
- 目标键匹配:通过
key.lower()统一转成小写,和target_terms集合匹配,避免重复判断大小写形式,更简洁高效 - 收集目标ID:用
extend()把所有目标键的ID合并到一个列表中 - 筛选符合条件的键值对:遍历字典时跳过目标键,对每个非目标键的ID列表,用列表推导式筛选出包含任意目标ID子串的元素,只要有符合的就把该键和对应元素存入结果字典
- 结果输出:分别打印目标ID和最终匹配的键值对
运行结果示例
目标术语对应的ID: ['C10.228.140.300.775', 'C14.907.253.855', 'H01.111.220'] 包含目标ID子串的键值对: Stroke, Lacunar: ['C10.228.140.300.775.600', 'C14.907.253.855.600'] Primary Open-Angle Glaucoma: ['H01.111.220.120']
内容的提问来源于stack exchange,提问作者rshar
相关产品推荐
相关产品推荐

