【问题标题】:I am getting TypeError: unhashable type: 'list', while trying to find the word frequency我得到 TypeError: unhashable type: 'list',同时试图找到词频
【发布时间】:2020-02-17 11:46:39
【问题描述】:

我来了

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)

【问题讨论】:

  • 能显示数据的内容吗?
  • 在您的问题中提供完整的错误信息
  • TypeError Traceback (最近一次调用最后一次) in () 3 token_words = data['tweet_split'].apply(lambda tweet: tweet.split( )) 4 for i in token_words: ----> 5 fd[i] += 1 6 fd TypeError: unhashable type: 'list'
  • @DeepankShekhar 您可以编辑您的问题并将其添加到预先格式化的代码块中,而不是将回溯放在评论中
  • 如果你尝试怎么办:token_words = data['tweet_split'].apply(lambda tweet: [x for y in tweet for x in y.split()]

标签: python pandas nlp nltk


【解决方案1】:

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

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

这是因为 Python dicts 只能使用不可变对象进行索引,这些对象本质上是不可变的,具有不可变的哈希值。元组类似于列表,因为它们是元素的集合,但主要区别之一是它们不能被修改,因此只要它们的内容也是不可变的,元组的哈希值就是恒定的:

>>> 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 原则上可以散列,但问题是列表的元素可以就地添加、删除或修改,因此列表的散列不会是恒定的,因此不会是用作字典键。

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 2017-04-25
    • 2019-10-11
    • 2020-03-27
    • 2020-05-11
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多