将列表与字典键错误python进行比较

ado*_*tyd 0 python dictionary list

我正在遍历列表并将每个元素与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'
Run Code Online (Sandbox Code Playgroud)

我的问题是它没有超越第一个elif声明.如果它在2个词典中找不到列表元素,则会输出键错误.我无法理解它,因为我在代码的另一部分中有另一个循环,它与此非常相似并且工作正常.如果某个键不在字典中,我希望else打印该语句.不是关键错误

Sil*_*Ray 5

正如mgilson所说,问题1是=是赋值,==是相等的.但是,即使您的问题编辑,如果您要查找某个键是否在字典中,您应该使用in运算符,而不是equals.换句话说,形式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
Run Code Online (Sandbox Code Playgroud)

你可以进一步抽象这个以处理带有函数的任意一组dicts,如果从长远来看这会证明是有用的(虽然对于少量的dicts,如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])
Run Code Online (Sandbox Code Playgroud)