web-dev-qa-db-ja.com

NLTK python error: "TypeError: 'dict_keys' object is not subscriptable"

クラスの宿題の指示に従い、テキストファイルで最も頻繁に使用される上位200の単語を検索することになっています。

コードの最後の部分は次のとおりです。

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

しかし、語彙200行の後にEnterキーを押すと、次のように戻ります。

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

答えを正しく返すことができるようにこれを修正する方法に関する提案はありますか?

27
user3760644

Python 3を使用しているように見えます。Python 3では、dict.keys()は反復可能であるがインデックス付けできないオブジェクトを返します。最も単純な(しかしそれほど効率的ではない)ソリューションは次のとおりです。

vocab = list(fdist1.keys())
44
Klaus D.

_python 3.5_を使用していますが、TypeErrorの同じ問題に遭遇しています。

vocab = list(fdist1.keys())を使用しても、最も頻繁に使用される上位50個の単語が表示されません。
しかしfdist1.most_common(50)はそうです。

さらに、これらの上位50の単語を頻度ではなく表示したい場合は、以下を試してください。

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

6
Roy Chen

最も頻繁に使用される200ワードを出力するには、次を使用します。fdist1.most_common(200)上記のコード行は、最も頻繁に使用される200ワードをキーと頻度のペアとして返します。

1
Shikhar Gupta

fdist1 = FreqDist(NSmyText)

vocab=fdist1.keys()

このコードはPython2.7で使用しています。そのため、いくつかの変更を行う必要があります。 dic.keys()は反復可能を返します。だから使用:

list(fdist1.keys())

0
Heron

python 3を使用している場合:

fdist1.most_common(200)

代わりに、最も頻繁に使用される200の単語を取得します。

0
lasu moses