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打印该语句.不是关键错误
正如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)
| 归档时间: |
|
| 查看次数: |
2987 次 |
| 最近记录: |