我对python很新,并且遇到了解某些错误的麻烦。当我通过调用具有该函数的脚本运行以下代码时,我收到错误
TypeError: unhashable type: 'list'
但是当我在控制台中创建一个函数并运行它时,我没有得到任何错误。非常感谢您的帮助。
代码是
def BookSent(sent_token):
dictBook = {}
listBooks = ['st']
for i in sent_token:
if re.search(r'Book of [a-zA-Z]+', i) is not None:
book = re.findall(r'Book of [a-zA-Z]+', i)[0]
book = str(book)
if dictBook.has_key(book):
dictBook[book].append(i)
else:
dictBook[book] = []
dictBook[book].append(i)
listBooks.append(book)
else:
dictBook[listBooks[-1]].append(i)
return dictBook
在将列表项用作键之前,我已经注意将其解析为字符串,因此我不明白为什么这应该给出错误。
完成错误消息:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\faisal.sayed\Documents\ProjectsPython\textAnalytics.py", line 18, in textBookVerse
if dictBook.has_key(book):
TypeError: unhashable type: 'list'
答案 0 :(得分:1)
当代码进入else
循环的第一个if而dictBook
不包含st
作为密钥时,代码将在以下行中给出例外。
例外:KeyError:&#39; st&#39;
dictBook[listBooks[-1]].append(i)
将dictBook定义为
dictBook = {"st":[]}
答案 1 :(得分:0)
导入重新
def BookSent(sent_token):
dictBook = {}
listBooks = ['st']
for i in sent_token:
if re.search(r'Book of [a-zA-Z]+', i) is not None:
book = re.findall(r'Book of [a-zA-Z]+', i)[0]
book = str(book)
if dictBook.has_key(book):
dictBook[book].append(i)
else:
dictBook[book] = []
dictBook[book].append(i)
listBooks.append(book)
else:
dictBook.setdefault(listBooks[-1], []).append(i)
return dictBook
打印BookSent(“世界之书”)
答案 2 :(得分:0)
谢谢大家的回复。代码很好。我只是把它放到另一个脚本中,它工作得很好。我不确定是否存在一些缓存问题。
结束主题。
答案 3 :(得分:-2)
字典没有附加方法。
您可以通过这样做添加
dictBook [newKey] = value
或
dictBook.update(键,值)
有关详细信息,请参阅Add new keys to a dictionary?。
希望这会有所帮助。