首页 > 解决方案 > 搜索程序中具有相同值的不敏感键

问题描述

我想检查一个文本,其中包含某处的单词以及句子开头首字母大写的同一个单词。然后我希望能够在字典中使用搜索程序中的命令来标记两者。

例如,有一个包含“the”和“The”的文本,我想编写一个字典,将两者都识别为“DETERMINER”,而不必将每个单词都定义为“DETERMINER”:

dict['the']='DETERMINER'
dict['The]='DETERMINER'

等等

标签: pythondictionarycase-sensitive

解决方案


有 2 个选项,您有重复的键。

按插入顺序取最后一个值

在 Python 3.7+(或 CPython 3.6 作为实现细节)中,您可以通过插入顺序获取最后一个值。在其他情况下,不应假定顺序。

dic = {'tiger': 'animal', 'Tiger': 'animal2', 'rose': 'plant'}  # example input
newdic = {k.casefold(): v for k, v in dic.items()}

{'rose': 'plant', 'tiger': 'animal2'}

首选小写或大写值

对于小写:

newdic = {k.casefold(): dic.get(k.casefold(), v) for k, v in dic.items()}

{'rose': 'plant', 'tiger': 'animal'}

同样,对于大写:

newdic = {k.capitalize(): dic.get(k.capitalize(), v) for k, v in dic.items()}

{'Rose': 'plant', 'Tiger': 'animal2'}

推荐阅读