I am getting TypeError: unhashable type: 'list', while trying to find the word frequency

I am getting TypeError: unhashable type: 'list', while trying to find the word frequency

我得到

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)

虽然您没有具体说明 data 是什么,但 data['tweet_split'] 可能会返回 listlist,而 FreqDist 是一个可能是一个类似字典的对象。

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

这是因为 Python 字典只能使用不可变对象进行索引,这些对象本质上是不可变的,具有不可变的哈希值。元组就像列表一样,因为它们是元素的集合,但主要区别之一是它们不能被修改,所以只要它们的内容也是不可变的,元组的哈希值就是常量:

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

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