2024-09-30 14:32:14 发布
网友
我越来越
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可能是一个类似字典的对象
data
data['tweet_split']
list
FreqDist
因此,当您执行fd[i] += 1操作时,您正在使用list索引fd,而使用字典或在其实现中使用字典的东西是不可能的,因为列表是不可散列的。您可以将这里的i转换为类似tuple的tuple(i),但也不清楚这是否正是您想要的
fd[i] += 1
fd
i
tuple
tuple(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原则上可以散列,但问题是列表的元素可以添加、删除或修改,因此列表的散列不是常量,因此不能用作字典键
虽然您没有确切指定
data
是什么,但是data['tweet_split']
很可能返回list
个list
,并且FreqDist
可能是一个类似字典的对象因此,当您执行
fd[i] += 1
操作时,您正在使用list
索引fd
,而使用字典或在其实现中使用字典的东西是不可能的,因为列表是不可散列的。您可以将这里的i
转换为类似tuple
的tuple(i)
,但也不清楚这是否正是您想要的这是因为Python dict只能用不可变对象编制索引,而不可变对象本质上具有不可变的哈希值。元组类似于列表,因为它们是元素的集合,但其中一个主要区别是它们不能被修改,因此只要它们的内容也是不可变的,元组的哈希值是恒定的:
list
原则上可以散列,但问题是列表的元素可以添加、删除或修改,因此列表的散列不是常量,因此不能用作字典键相关问题 更多 >
编程相关推荐