使用casefold匹配字典键触发KeyError,求忽略大小写的正确实现
问题原因
你的代码触发KeyError是因为原字典的键没有统一转换成大小写无关的形式:当处理'ab'时,item.casefold()得到'ab',但原字典test_dict里并没有'ab'这个键——对应的值'aB'的键是'Ab',它的casefold()结果才是'ab',直接用转换后的字符串去原字典查找自然找不到。
正确实现方法
方法一:构建大小写无关的映射字典(推荐,查找效率高)
先把原字典的键统一转换成casefold()后的形式,生成新的映射字典,之后直接用转换后的输入值去查找即可:
test_vals = ['ad', 'ab', 'rD'] test_dict = {'ad': 'Ad', 'Ab': 'aB', 'RD': 'RD'} # 生成键为casefold后的新字典 case_insensitive_dict = {k.casefold(): v for k, v in test_dict.items()} for item in test_vals: print(case_insensitive_dict[item.casefold()])
运行后会输出:
Ad aB RD
方法二:遍历原字典匹配(适合小字典)
如果不想创建新字典,可以遍历原字典的键,逐个比较casefold()后的结果:
test_vals = ['ad', 'ab', 'rD'] test_dict = {'ad': 'Ad', 'Ab': 'aB', 'RD': 'RD'} for item in test_vals: target_key = item.casefold() # 遍历原字典找匹配的键 for k, v in test_dict.items(): if k.casefold() == target_key: print(v) break # 可选:处理找不到匹配的情况 # else: # print(f"未找到{item}对应的匹配项")
内容的提问来源于stack exchange,提问作者user2981194
相关产品推荐
相关产品推荐

