【问题标题】:NLTK python error: "TypeError: 'dict_keys' object is not subscriptable"NLTK python 错误:“TypeError:'dict_keys'对象不可下标”
【发布时间】:2014-12-11 06:00:23
【问题描述】:

我正在按照课堂作业的说明进行操作,并且我应该在文本文件中查找最常用的 200 个单词。

这是代码的最后一部分:

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

但是当我在 vocab 200 行之后按 enter 时,它会返回:

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

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

【问题讨论】:

  • 堆栈跟踪与您显示的代码不匹配。你能复制粘贴确切代码和错误信息吗?
  • 有没有办法将文本从/粘贴到终端?到目前为止,我还没有弄清楚。
  • 需要import 行来理解sn-p。

标签: python python-3.x dictionary key nltk


【解决方案1】:

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

vocab = list(fdist1.keys())

【讨论】:

  • 你还不如写vocab = list(fdist1)
  • Iterables 是 python3 中列表操作的基础,它们需要通过 list(iterable) 来完成:这种情况并不罕见。我抱怨一门语言试图学习如何更好地适应限制。
【解决方案2】:

我正在使用python 3.5,我遇到了与 TypeError 相同的问题。

使用 vocab = list(fdist1.keys()) 并没有给出最常用的前 50 个词。
但是fdist1.most_common(50) 可以。

另外,如果你只是想显示前 50 个单词而不是频率,你可以试试:

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

【讨论】:

  • 恕我直言,这是一个更有帮助的回复,因为它提供了 OP 要求的 most_common() 函数的示例。
【解决方案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())

      【讨论】:

        【解决方案6】:

        如果你想获取元素作为键和值(单词和频率),你可以使用:

        list(fdist1.items())[:200]

        【讨论】:

          猜你喜欢
          • 2020-01-30
          • 2020-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-14
          • 2023-03-20
          • 2015-07-31
          • 2020-02-23
          相关资源
          最近更新 更多