我得到了TypeError:unhabable类型:“list”,同时尝试查找单词频率

2024-09-30 14:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我越来越

TypeError: unhashable type: 'list'

当我尝试这段代码时:

from nltk import FreqDist
fd = FreqDist()
token_words = data['tweet_split'].apply(lambda tweet: tweet.split())
for i in token_words:

 fd[i] += 1
print(fd)

Tags: 代码fromimporttokendatatypelisttweet
1条回答
网友
1楼 · 发布于 2024-09-30 14:32:14

虽然您没有确切指定data是什么,但是data['tweet_split']很可能返回listlist,并且FreqDist可能是一个类似字典的对象

因此,当您执行fd[i] += 1操作时,您正在使用list索引fd,而使用字典或在其实现中使用字典的东西是不可能的,因为列表是不可散列的。您可以将这里的i转换为类似tupletuple(i),但也不清楚这是否正是您想要的

这是因为Python dict只能用不可变对象编制索引,而不可变对象本质上具有不可变的哈希值。元组类似于列表,因为它们是元素的集合,但其中一个主要区别是它们不能被修改,因此只要它们的内容也是不可变的,元组的哈希值是恒定的:

>>> t = ('a', 'b', 'c')
>>> hash(t)
6876511439064834292
>>> l = ['a', 'b', 'c']
>>> hash(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

list原则上可以散列,但问题是列表的元素可以添加、删除或修改,因此列表的散列不是常量,因此不能用作字典键

相关问题 更多 >