我在尝试查找单词频次时遇到TypeError:无法散列的类型:'list'

问题描述 投票:1回答:1

我正在

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)
python pandas nlp nltk
1个回答
0
投票

尽管您没有确切指定data是什么,但是data['tweet_split']可能返回listlist,而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原则上可以进行散列,但是问题在于可以就地添加,删除或修改列表的元素,因此列表的散列将不是恒定的,因此将无用作为字典键。

© www.soinside.com 2019 - 2024. All rights reserved.