好吧,所以我遇到了一个关键错误,在这里我将其范围缩小到此功能:
def find_coexistance(D, query):
'''(dict,str)->list
Description: outputs locations of words in a test based on query
Precondition: D is a dictionary and query is a string
'''
query = query.split(" ")
if (len(query) == 1):
return D[str(query)]
else:
return D.intersection(query)
##############################
# main
##############################
file=open_file()
d=read_file(file)
query=input("Enter one or more words separated by spaces, or 'q' to quit:").strip().lower()
a = find_coexistance(d, query)
print (a)
这是我收到的以下输出:
Traceback (most recent call last):
File "C:\Users\hrith\Documents\ITI work\A5_300069290\a5_part1_300069290.py",
line 135, in <module>
a = find_coexistance(d, query)
File "C:\Users\hrith\Documents\ITI work\A5_300069290\a5_part1_300069290.py",
line 122, in find_coexistance
return D[str(query)]
KeyError: "['this']"
这是词典里面的内容:
d = {'this': {1, 2, 3, 4}, 'is': {1, 2, 3, 4}, 'man': {1, 2}, 'also': {2,
4}, 'woman': {3, 4}}
如果我检查字典中是否有“ this”,我将得到:
>>>'this' in d
True
那我在做什么错??????
答案 0 :(得分:0)
在字符串上使用split()
时,它总是返回一个列表。因此"foo bar".split(" ")
给出了["foo", "bar" ]
。但是"foo".split(" ")
给出一个1元素列表["foo"]
。
该代码使用字符串列表作为字典索引,而不是纯字符串。
def find_coexistance(D, query):
query = query.split(" ")
if (len(query) == 1):
return D[str(query)] # <-- HERE
else:
return D.intersection(query)
这是一个简单的修复程序,采用拆分的第一个元素。
def find_coexistance(D, query):
query = query.split(" ")
if (len(query) == 1):
return D[query[0]] # <-- HERE
else:
return D.intersection(query)
答案 1 :(得分:0)
正如其他人指出的那样,query.split(" ")
返回一个列表。使用str()将列表转换为单个字符串,并在其中包含方括号和引号之类的字符。
>>> q = "hello hi there"
>>> query = q.split()
>>> q
'hello hi there'
>>> query
['hello', 'hi', 'there']
>>> str(query) == "['hello', 'hi', 'there']"
True
无论如何,您最终要做什么?如果您尝试将字符串拆分成单词列表,请查找D
中存在的所有单词,查看每个单词对应的数字集,最后返回所有这些集的交集,那么类似的方法应该起作用:
def find_coexistence(D, query):
query = query.split(" ")
sets_to_intersect = [ D[word] for word in query if word in D ]
return set.intersection(*sets_to_intersect)