NLTK python 错误:“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

关于如何解决此问题以便它可以正确返回答案的任何建议?

原文由 user3760644 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
2 个回答

看起来您正在使用 Python 3。在 Python 3 dict.keys() 返回一个可迭代但不可索引的对象。最简单(但效率不高)的解决方案是:

 vocab = list(fdist1.keys())[:200]

在某些情况下,希望继续使用迭代器对象而不是列表。这可以通过 itertools.islice() 来完成:

 import itertools
vocal_iterator = itertools.islice(fdist1.keys(), 200)

原文由 Klaus D. 发布,翻译遵循 CC BY-SA 4.0 许可协议

我正在使用 python 3.5 我遇到了同样的问题 TypeError

使用 vocab = list(fdist1.keys()) 不会给我最常用的前 50 个单词。

但是 fdist1.most_common(50) 确实如此。

此外,如果你只想显示前 50 个单词而不是它们的频率,你可以尝试:

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

原文由 Roy Chen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题