我正在
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']
可能返回list
的list
,而FreqDist
可能是类似字典的对象。
因此,当您执行fd[i] += 1
时,将使用fd
来为list
编制索引,因为在列表中无法散列,因此无法使用字典或在实现中使用字典的内容进行索引。您可以将此处的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'
list
s原则上可以进行散列,但是问题在于可以就地添加,删除或修改列表的元素,因此列表的散列将不是恒定的,因此将无用作为字典键。