Python,比较相同的字符串返回False

时间:2014-12-06 03:29:08

标签: python string comparison

我知道很多类似的问题都发布在这里,但我找不到符合我案例的问题。

我有一个由字典组成的列表,其中每个字典只包含一个键,列表作为其值。例如: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'>),但比较产生假值。

感谢您提前获得有关问题性质的任何帮助或/和建议。

1 个答案:

答案 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