0

我正在遍历一个列表并将每个元素与 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打印该语句。不是关键错误

4

3 回答 3

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

您可以进一步抽象它以使用函数处理任意一组 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])
于 2012-07-20T13:06:03.563 回答
2

您可以像这样检查字典中的键:

if mylist[i] in mydict:

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

于 2012-07-20T13:08:05.823 回答
0

您可以使用get字典的方法。

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

如果nonsense_value未给出,则默认为Nonewhich 可能对您的目的来说已经足够废话了。但是,这并没有真正意义,因为它检查字典值是否与键相同。

您可能只是想检查键是否在字典中,您应该使用以下成语:

if mylist[i] in mydict:
   print "in dict 1"
...
于 2012-07-20T13:03:38.693 回答