疾病预测函数出现KeyError: 'skin_rash'问题求解决
解决KeyError: 'skin_rash'的问题
问题根源
你的symptom_index字典使用替换下划线为空格的字符串作为键(比如"skin rash"),但你传入的症状参数是带下划线的格式(比如"skin_rash"),两者格式不匹配,导致无法找到对应键触发KeyError。
具体修复方案
1. 统一输入与字典键的格式
在predictDisease函数里,先对输入的症状做格式转换,把下划线替换为空格,再去匹配symptom_index:
def predictDisease(symptoms_input): # 处理不同类型的输入:字符串/列表/集合 if isinstance(symptoms_input, str): symptoms = symptoms_input.split(',') else: symptoms = list(symptoms_input) # 统一格式:去掉前后空格,替换下划线为空格 processed_symptoms = [symptom.strip().replace('_', ' ') for symptom in symptoms] # 后续用processed_symptoms查询symptom_index,构建模型输入向量 # ... 原有的预测逻辑代码 ...
2. 验证symptom_index的正确性
打印symptom_index的键列表,确认目标症状(比如"skin rash")确实存在于字典中,避免构建字典时出现遗漏或转换错误:
print(list(symptom_index.keys()))
如果发现缺少对应键,检查字典构建代码,确保所有数据集里的症状都被正确转换为空格格式的键。
3. 可选:兼容多种输入格式
如果想让函数同时支持带空格和下划线的症状输入,可以写一个归一化函数统一格式:
def normalize_symptom(symptom): # 统一转换为字典使用的空格格式,同时转小写避免大小写问题 return symptom.strip().replace('_', ' ').lower() # 处理输入时调用归一化函数 processed_symptoms = [normalize_symptom(s) for s in symptoms]
内容的提问来源于stack exchange,提问作者crm revesz
相关产品推荐
相关产品推荐

