2014-12-06 68 views
0

我知道,那种许多问题都贴在这里,但我无法找到一个我的情况相匹配。Python中,比较相同字符串返回False

我有由字典,每个字典中只包含一个键的列表,列表作为它的值。例如: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),该函数返回的无对象的(而不是{'key1': [1,2,3]}

两个被比较的值具有相同的长度,并且是相同的类型。 (<type 'str'>),但比较会产生False值。

感谢您提前给予任何关于问题性质的协助或/和建议

+0

你真的需要做大小写不敏感的比较吗? – 2014-12-06 05:14:48

回答

2

dict.keys()返回在Python 3在Python 2列表中查看的对象,所以你与你在这里传递的字符串比较它们的字符串表示。取而代之的是,你可以使用in运算符来检查词典包含密钥someKey,当你想要做一个区分大小写的搜索,你必须申请str.lower每个关键第一:如果

def foo(someKey, someList): 
    for i in someList: 
     if someKey.lower() in (k.lower() for k in i): 
      return i 

而且你类型的字典总是包含一个键,那么你可以使用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 
相关问题