-1

我有以下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将始终为空集。我看不出我的代码有什么问题。

4

1 回答 1

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:

足够的。

您可能希望直接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])

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

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

.keys()如果您使用的是 Python 3,请使用;.viewkeys()在 Python 2 和.keys()Python 3 中返回字典视图对象,至少对于键而言,它们的作用类似于集合。

于 2013-07-07T17:37:08.897 回答