TypeError:unhashable类型:从脚本调用代码时'list',但在控制台中创建函数运行相同代码时没有错误

时间:2014-12-26 17:54:55

标签: python

我对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'

4 个答案:

答案 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?

希望这会有所帮助。