使用不区分大小写的字符串访问python字典

时间:2018-05-28 10:04:46

标签: python string dictionary

我正在努力查看是否存在一种方法来访问python字典,其中字符串为具有正确字符串但不区分大小写的键

例如使用此代码:

dictionary = {'one': 1, 'two': 2, 'three', 3}
list = ['One', 'second', 'THree']

for item in list:
    if item in dictionary:
        print(item)

我无法找到输出为: `一个THree',即。比较字典的键和我不区分大小写的字符串

有办法吗?

7 个答案:

答案 0 :(得分:1)

您需要通过将dictionary.keys()转换为小写或list元素转换为小写或两者来处理不区分大小写:

for item in list:
    if item.lower() in map(str.lower, dictionary.keys()):
        print(item)

您可以使用lower()upper(),但在这两种情况下都必须保持一致。

答案 1 :(得分:1)

创建一个小写字典键列表,然后将列表中每个项目的小写变体与此列表进行比较。

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.lower() in [key.lower() for key in dictionary.keys()]:
        print(item)

因此:

One
THree

答案 2 :(得分:0)

使用字符串方法lower

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.lower() in dictionary:
        print(item)

输出:

One
THree

答案 3 :(得分:0)

试试这个:

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.lower() in [d.lower() for d in dictionary.keys()]:
        print(item)

答案 4 :(得分:0)

使用casefold()进行不区分大小写的搜索:

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.casefold() in dictionary:
        print(item)

列表理解方式:

print( '\n'.join([item for item in list if item.casefold() in dictionary]))

答案 5 :(得分:0)

尝试使用python lambda 关键字:

l = ['One', 'second', 'THree']
lc = lambda x: [i for i in x if i.lower() in dictionary]
print(lc(l))

输出:

['One', 'THree']

注意:我将变量名list更改为l因为list是python关键字所以如果你想调用list关键字,它不会调用list关键字而是它将调用列表

答案 6 :(得分:0)

正确的方法是使用casefold函数。此功能可从Python 3.3开始使用。

返回字符串的casefolded副本。大小写折叠的字符串可能用于无大小写的匹配。

折页与下折相似,但更具攻击性,因为它 旨在删除字符串中的所有大小写区别。例如, 德国的小写字母“ß”等效于“ ss”。因为它是 已经是小写的,lower()对“ß”无效。 casefold() 将其转换为“ ss”。

案例折叠算法在Unicode的3.13节中进行了描述 标准。

dictionary = {"one": 1, "two": 2, "three": 3}
list = ["One", "second", "THree"]

print(*(item for item in list if item.casefold() in dictionary), sep="\n")

输出:

One
THree