Я получаю TypeError: unhashable type: 'list', пытаясь найти частоту слова - PullRequest
1 голос
/ 17 февраля 2020

Я получаю

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)

1 Ответ

0 голосов
/ 17 февраля 2020

Хотя вы точно не указали, что такое data, data['tweet_split'], скорее всего, возвращает list из list с, а FreqDist, вероятно, является словоподобным объектом.

Таким образом, когда вы делаете fd[i] += 1, вы индексируете fd с помощью list, что со словарем или чем-то, что использует словари в их реализации, невозможно, потому что списки не могут хэшироваться. Возможно, вы можете конвертировать i здесь в tuple, например tuple(i), но не совсем понятно, если это именно то, что вы и хотели.

Это потому, что Python dicts можно индексировать только с неизменные объекты, которые по своей природе являются неизменными, имеют неизменное значение ha sh. кортежи похожи на списки в том смысле, что они представляют собой набор элементов, но одно из основных отличий состоит в том, что они не могут быть изменены, так как их содержимое также является неизменным, ха sh кортежа является постоянным:

>>> 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 в принципе можно хэшировать, но проблема в том, что элементы списка могут быть добавлены, удалены или изменены на месте, поэтому ха sh списка не будет постоянным, и таким образом, не будет полезным в качестве словарного ключа.

...