Ошибка Python NLTK: "TypeError: объект" dict_keys "не подлежит индексированию"

Я следую инструкциям для домашнего задания класса, и я должен найти 200 самых популярных слов в текстовом файле.

Вот последняя часть кода:

fdist1 = FreqDist(NSmyText)
vocab=fdist1.keys()
vocab[:200]

Но когда я нажимаю ввод после строки vocab 200, она возвращает:

 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object is not subscriptable

Есть предложения о том, как это исправить, чтобы он мог правильно вернуть ответ?

Ответы

Ответ 1

Похоже, вы используете Python 3. В Python 3 dict.keys() возвращает итеративный, но не индексируемый объект. Наиболее простым (но не очень эффективным) решением будет:

vocab = list(fdist1.keys())

Ответ 2

Я использую python 3.5, и я отвечаю той же проблеме TypeError.

Использование vocab = list(fdist1.keys()) не дает мне 50 наиболее часто используемых слов.
Но fdist1.most_common(50) делает.

Кроме того, если вы просто хотите показать эти 50 лучших слов не с их частотой, вы можете попробовать:

[word for (word, freq) in fdist1.most_common(50)]

Ответ 3

Чтобы печатать наиболее часто используемые 200 слов, используйте:   fdist1.most_common (200) Вышеприведенная строка кода вернет 200 наиболее часто используемых слов в виде пары клавиш-частот.

Ответ 4

Если вы используете python 3, попробуйте:

fdist1.most_common(200)

вместо этого, чтобы получить 200 наиболее часто встречающихся слов.

Ответ 5

fdist1 = FreqDist(NSmyText)

vocab=fdist1.keys()

Этот код используется в Python2.7. Поэтому вы должны сделать некоторые изменения. dic.keys() возвращает итерацию. Таким образом, используя:

list(fdist1.keys())