搜索程序中具有相同值的不敏感键

Insensitive keys with the same value in a searching program

我想检查一段文本,该文本在某处包含一个词,并且该词的首字母大写位于句子的开头。然后我希望能够在字典中使用搜索程序中的命令将两者标记为相同。

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

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

等等

你可以这样做:

dic = {'tiger':'animal','Tiger':'animal','rose':'plant'}
result = { key.lower() : value for key, value in dic.items() }
print(result)

输出

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

有 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'}

既然你是初学者,我会建议你更详细的代码:

dic = {'tiger':'animal','Tiger':'animal','rose':'plant'}
result = {}
for key in dic:
    dic[key.lower()] = dic[key] # the key is always in lower case. If it exists already, it will be overriden.
print(result)

这应该可以帮助您入门。您可以检查同一个小写键的不同值并抛出错误。