2014-12-06 103 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 
相關問題