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

时间:2018-12-03 16:35:49

标签: python dictionary case-sensitive

我想检查一个文本,该文本的某个位置包含一个单词,而同一单词的首字母大写位于句子的开头。然后,我希望能够利用搜索程序中的命令在字典中对两者进行标注。

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

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

3 个答案:

答案 0 :(得分:1)

有两个重复键的选项。

按插入顺序获取最后一个值

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

答案 1 :(得分:1)

由于您似乎是一个初学者,所以我将为您建议一个更详细的代码:

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)

这应该可以帮助您入门。您可以为相同的小写字母检查不同的值,并引发错误。

答案 2 :(得分:0)

您可以这样做:

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

输出

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