提问人:user2981194 提问时间:11/15/2023 更新时间:11/15/2023 访问量:34
将 casefold 与字典一起使用时遇到问题
Trouble using casefold with dictionary
问:
我正在尝试比较字典中所有字符串的项目并忽略大小写。下面是我尝试使用它的一个例子 - 它不起作用,但我想发生的是打印出 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()])
答:
0赞
ShadowRanger
11/15/2023
#1
如果您通过折叠大小写来查找钥匙,则最好将钥匙折叠起来。您可以用带有大小写折叠键的键替换,例如:dict
test_dict = {key.casefold(): value for key, value in test_dict.items()}
或者用折叠的变体来增强它(因此可以查找原始形式或大小折叠形式:
test_dict.update({key.casefold(): value for key, value in test_dict.items()})
关键是,如果密钥尚未以常见的大小折叠形式出现,则没有解决方案可以从 的功能中受益,这些功能将在使用折叠密钥进行查找时找到展开的密钥,哈希映射不能做这样的事情。dict
dict
dict
0赞
CodeMaven42
11/15/2023
#2
法典:
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 中的所有元素转换为小写,以实现不区分大小写的匹配。
map(str.lower, test_vals) 中的条件 key.lower() 检查当前键的小写版本是否存在于 test_vals 中任何元素的小写版本中。
如果条件为 true,则结果列表中将包含相应的值 test_dict[key]。
评论
casefold()
将字符串转换为小写。因此,您的循环会尝试访问字典中的键“ad”、“ab”和“rd”。但是“ad”和“rd”在字典中不存在。