else语法中的Python错误

时间:2013-07-07 17:36:37

标签: python

我有以下python代码:

def myFunction(myDictionary, query):
    D=set() 
    for i in range(len(query)):
        if query[i] in myDictionary.keys():
            if i==0:
                D.update((myDictionary[query[i]])
            else:
                D.intersection_update(myDictionary[query[i]])
    return D

myDictionary包含以下字典项:{'first':{0,1,2}, 'second':{5,2,1}, ..etc}。该查询包含一个单词列表,例如['first','second',..ect,] 我想返回所有query个单词的交集。例如,如果query=['first','second']myDictionary={'first':{0,1,2}, 'second':{5,2,1}},那么我的结果集应该是:{1,2}的交集。

当我运行我的代码时,我在else语句中遇到语法错误。我添加了if i==0,否则我的结果集D将始终为空集。我的代码中没有看到什么问题。

1 个答案:

答案 0 :(得分:3)

你错过了一个闭幕式:

D.update((myDictionary[query[i]])
# 2 open ^ but only one close ---^

Python无法在下一行检测到缺失的括号,else:语句是意外的。

你只需要一对括号:

D.update(myDictionary[query[i]])

您也无需致电.keys()对字典进行会员资格测试:

if query[i] in myDictionary:

就够了。

您可能希望直接在<{1}}列表中循环并改为使用query

enumerate()

或切换到使用生成器表达式:

for i, q in enumerate(query):
    if q in myDictionary:
        if not i:
            D.update(myDictionary[q])
        else:
            D.intersection_update(myDictionary[q])

如果您使用的是Python 3,请使用def myFunction(myDictionary, query): matches = (myDictionary[q] for q in myDictionary.viewkeys() & query) try: D = {next(matches)} # start with the first match except StopIteration: # Nothing matched return set() D.intersection_update(*matches) return D ; Python 2中的.keys()和Python 3中的.viewkeys()返回dictionary view objects,至少对于键来说,它们就像集合一样。