python 在使用词典时遇到问题

axzmvihb  于 11个月前  发布在  Python
关注(0)|答案(2)|浏览(72)

我正在尝试比较字典中所有字符串的项目,并忽略大小写。下面是我如何尝试使用它的一个例子-它不起作用,但我希望发生的是将Ad,aB和RD打印出来。相反,当它到达'ab'时,我得到一个关键字错误,因为我没有正确使用语法。任何关于我如何做到这一点的帮助都将不胜感激。

test_vals = ['ad', 'ab', 'rD']
test_dict = {'ad': 'Ad', 'Ab': 'aB', 'RD': 'RD'}
for item in test_vals:
    print(test_dict[item.casefold()])

字符串

ulydmbyx

ulydmbyx1#

如果您要通过折叠式查找钥匙,那么钥匙最好是折叠式的。您可以将dict替换为具有折叠式钥匙的钥匙,例如:

test_dict = {key.casefold(): value for key, value in test_dict.items()}

字符串
或增加它与折叠的变体(因此无论是原始形式或casefolded形式可以查找:

test_dict.update({key.casefold(): value for key, value in test_dict.items()})


关键是,如果键在dict中还没有采用常见的大小写折叠形式,那么就没有任何解决方案可以从dict的特性中获益,即使用折叠键查找dict中的展开键,哈希Map不能做这样的事情。

velaa5lx

velaa5lx2#

代码:

test_vals = ['ad', 'ab', 'rD']
test_dict = {'ad': 'Ad', 'Ab': 'aB', 'RD': 'RD'}

# Using a list comprehension to filter keys and retrieve corresponding values
result = [test_dict[key] for key in test_dict if key.lower() in map(str.lower, test_vals)]

字符串

打印结果

print(result)


列表解析遍历test_dict中的键。
key.lower()将当前键转换为小写,以便进行不区分大小写的比较。
map(str.lower,test_vals)将test_vals中的所有元素都转换为numb,以便进行不区分大小写的匹配。
map(str.lower,test_vals)中的条件key.lower()检查test_vals中任何元素的新版本中是否存在当前键的新版本。
如果条件为真,则相应的值test_dict[key]将包含在结果列表中。

相关问题