我知道很多类似的问题都发布在这里,但我找不到符合我案例的问题。
我有一个由字典组成的列表,其中每个字典只包含一个键,列表作为其值。例如: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]}
。
两个比较值具有相同的长度且属于同一类型(<type 'str'>
),但比较产生假值。
感谢您提前获得有关问题性质的任何帮助或/和建议。
答案 0 :(得分:2)
dict.keys()
返回Python 2中的列表并在Python 3中查看对象,因此您将其字符串表示与您在此处传递的字符串进行比较。您可以使用in
运算符检查字典是否包含密钥someKey
,而不是这样,因为您要进行不区分大小写的搜索,您必须将str.lower
应用于每个密钥第一:
def foo(someKey, someList):
for i in someList:
if someKey.lower() in (k.lower() for k in i):
return i
此外,如果您的dicts始终包含一个密钥,那么您可以使用iter()
和next()
获取密钥名称:
>>> d = {'key1': [1,2,3]}
>>> next(iter(d))
'key1'
所以,foo
将是:
def foo(someKey, someList):
for i in someList:
if someKey.lower() == next(iter(i)).lower():
return i