簡體   English   中英

將列表與字典鍵錯誤python比較

[英]Comparing list to dictionary key error python

我遍歷一個列表並將每個元素與2個字典進行比較。 列表元素是字典中的鍵。 有些元素在2個字典中,有些在一個字典中,有些不在。

for i in range(0,len(mylist)-1):
    if mylist[i] == mydict[mylist[i]]:
        print 'in dict 1'
    elif mylist[i] == mydict2[mylist[i]]:
        print 'in dict 2'
    else: print 'not in dictionaries'

我的問題是它沒有通過第一個elif語句。 如果在2個字典中都找不到list元素,則會顯示一個關鍵錯誤。 我無法理解它,因為我在代碼的另一部分中有另一個循環與此非常相似並且可以完美運行。 如果鍵不在字典中,則我希望打印else語句。 不是關鍵錯誤

正如米爾森說的那樣,問題1是=是賦值,==是相等。 但是,即使進行問題編輯,如果要查找某個鍵是否在字典中,也應該使用in運算符,而不是等號。 換句話說, if key in dict:的形式。 所以:

for key in mylist:
    if key in mydict1:
        print 'Key %s in dict 1' % key
    elif key in mydict2:
        print 'Key %s in dict 2' % key
    else:
        print 'Key %s not in dictionaries' % key

如果從長遠來看會證明有用的話,您可以進一步對此進行抽象,以處理帶有函數的任意字典(盡管對於少量字典,例如2,最好使用上述硬編碼檢查):

def print_keys_from_list_in_dicts(key_list, dict_list):
    indexed_dict_list = enumerate(dict_list)
    for key in key_list:
        found_in_list = []
        for index, dict in indexed_dict_list:
            if key in dict:
                found_in_list.append(index)
        print 'Key %s found in dicts %s.' % (key, found_in_list)

print_keys_from_list_in_dicts(mylist, [mydict1, mydict2])

您可以像這樣檢查字典中的鍵:

if mylist[i] in mydict:

另外,如果您有10個項目的列表,則range(0,len(mylist)-1)將返回[0,1,2,3,4,5,6,7,8]因此列表中的最后一個元素在任何情況下都可能不會考慮。

您可以將get方法用於字典。

if mylist[i] == mydict.get(mylist[i],nonsense_value):
   ...

如果未給出nonsense_value ,則默認為None ,這對於您的目的可能是毫無意義的。 但是,這實際上沒有意義,因為它檢查字典值是否與鍵相同。

您可能只想檢查鍵是否在字典中,應該使用以下慣用法:

if mylist[i] in mydict:
   print "in dict 1"
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM