我正在遍历列表并将每个元素与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
语句。不是关键错误
答案 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"
...