Python,比较相同的字符串返回False
我知道这里贴了很多类似的问题,但我找不到一个与我的情况相符的 我有一个由字典组成的列表,其中每个字典只包含一个键,一个列表作为它的值。例如:Python,比较相同的字符串返回False,python,string,comparison,Python,String,Comparison,我知道这里贴了很多类似的问题,但我找不到一个与我的情况相符的 我有一个由字典组成的列表,其中每个字典只包含一个键,一个列表作为它的值。例如:keyList=[{'key1':[1,2,3]},{'key2':[3,4,5]},…] 现在,我想创建一个简单的函数,它接收两个参数:前面提到的列表和一个键,并从给定列表返回一个匹配的字典 功能是: def foo(someKey, someList): for i in someList: if str(i.keys()).lo
keyList=[{'key1':[1,2,3]},{'key2':[3,4,5]},…]
现在,我想创建一个简单的函数,它接收两个参数:前面提到的列表和一个键,并从给定列表返回一个匹配的字典
功能是:
def foo(someKey, someList):
for i in someList:
if str(i.keys()).lower() == str(someKey).lower():
return i
调用时:foo('key1',keyList)
,函数返回None对象(而不是{'key1':[1,2,3]}
两个比较的值具有相同的长度和相同的类型(
),但是比较会产生错误的值
感谢您提前提供有关问题性质的任何帮助或建议。dict.keys()
在Python2中返回一个列表,在Python3中返回view对象,因此您要将它们的字符串表示形式与您在此处传递的字符串进行比较。相反,您可以使用中的操作符来检查字典是否包含键someKey
,因为要进行不区分大小写的搜索,您必须应用str.lower代码>先到每个键:
def foo(someKey, someList):
for i in someList:
if someKey.lower() in (k.lower() for k in i):
return i
此外,如果DICT始终包含一个键,则可以使用iter()
和next()
获取键名:
因此,foo
将是:
def foo(someKey, someList):
for i in someList:
if someKey.lower() == next(iter(i)).lower():
return i
您真的需要进行不区分大小写的比较吗?
def foo(someKey, someList):
for i in someList:
if someKey.lower() == next(iter(i)).lower():
return i