欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DeBug记录:'dict_keys' object is not subscriptable

程序员文章站 2022-03-23 12:54:55
...

问题背景

学习《python自然语言处理》这本书的时候,有如下代码

>>> fdist1 = FreqDist(text1)
>>> vocabulary1 = fdist1.keys()
>>> vocabulary1[:50]

按照讲解,最后一段代码应当输出text1文本中前50个出现频率最高的词汇,然后实际允许时,结果如下:

DeBug记录:'dict_keys' object is not subscriptable

错误分析

错误信息的字面意思是说,这是一个类型错误,‘dict_keys’类型的对象不能进行索引操作。

由于我是刚接触自然语言处理中的nltk,不了解这个数据类型都有哪些操作,而且家里的网也实在是一言难尽上不去NLTK的官网,不过可以先看一下vocabulary1这个变量的内容

DeBug记录:'dict_keys' object is not subscriptable

从输出结果上看,这个变量类型是小括号包着中括号,类似于:(['a', 'b', 'c']),这并不是一个列表,所以不能进行索引操作。至于产生这个错误的原因,有推测是版本不同导致的,《python自然语言处理》这本书使用的还是python2,而且使用的nltk版本也是2.0,很有可能之前生成的vocabulary1变量类型是列表类型。

解决方法

了解问题原因之后,一个简单可行的解决方法就是通过类型转换,将vocabulary1转为list类型,代码如下

list(vocabulary1)[:50]

此时结果如下:

DeBug记录:'dict_keys' object is not subscriptable

相关标签: DeBug