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

时间:2012-07-20 13:01:31

标签: python list dictionary

我正在遍历列表并将每个元素与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个词典中找不到列表元素,则会输出键错误。我无法理解它,因为我在代码的另一部分中有另一个循环,它与此非常相似并且工作正常。如果某个键不在字典中,我希望打印else语句。不是关键错误

3 个答案:

答案 0 :(得分:5)

问题1,正如mgilson所说,是=是赋值,==是相等的。但是,即使您的问题编辑,如果您要查找某个键是否在字典中,您应该使用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

你可以进一步抽象这个来处理带有函数的任意一组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])

答案 1 :(得分:2)

您可以检查字典中的键,如下所示:

if mylist[i] in mydict:

此外,如果您有10个项目的列表,range(0,len(mylist)-1)将返回[0,1,2,3,4,5,6,7,8],因此在任何情况下都可能不会考虑列表中的最后一个元素。

答案 2 :(得分:0)

您可以使用get方法进行词典。

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

如果未给出nonsense_value,则默认为None,这可能是无意义的。但是,这确实没有意义,因为它检查字典值是否与密钥相同。

你可能只想检查密钥是否在字典中,你应该使用这个习语:

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