我有以下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
将始终为空集。我的代码中没有看到什么问题。
答案 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,至少对于键来说,它们就像集合一样。