python3字典修改元素值报”KeyError"错误。

zwdnet 2016-03-30 02:32:45
我在写一个爬虫程序,爬下网页来,用结巴分词,将中文分词,然后建立一个字典(static),key就是分出来的词,value是这个词在文本中出现的频率数,在统计这个频率数的时候出现KeyError错误,详细程序片段如下:

import jieba
#爬网页的程序略
#处理数据
inputFile = open("result.txt", "r", encoding = "utf-8") #result.txt是爬下来的数据保存的文本文件,全是中文,没有标点符号和空格
outFile = open("fenci.txt", "w+", encoding = "utf-8") #保存分词后的文本。
static = {}
text = inputFile.read()
analy = jieba.cut(text, cut_all=False)
wordlist = []
for s in analy:
wordlist.append(s+" ")
static[s] = 0
outFile.writelines(wordlist)
inputFile.close()
outFile.close()

#数据展示
inputFile = open("fenci.txt", "r", encoding="utf-8")
allWords = []
line = inputFile.readline()
while line:
list = line.split(" ")
for word in list:
allWords.append(word) #将分词后的文件里的所有词都放到一个list里。
line = inputFile.readline()
inputFile.close()
print("测试,先改文件,再按任意键")
‘’‘如此进行测试,因为每个词后面都有个空格,怀疑是这个问题,在这里程序暂停,手动打开fenci.txt删去最后一个词后面的空格,保存,再按任意键继续程序,一样报错。’‘’
input()
for i in allWords:
print(i + str(static.get(i)))
static[i] += 1 #这一行报错!

程序最后几行输出以及报错信息如下:

广告7
对联0
广告8
None
Traceback (most recent call last):
File "C:/Users/Administrator/code/LanguageTest/main.py", line 97, in <module>
static[i] += 1
KeyError: ''

Process finished with exit code 1

输出的数据是对的,只是最后一行多了个"None"。
请帮忙看看是哪里出错了?谢谢。

附程序用到的两个文本文件的例子(全文太长了),注意“人事”后面有个空格:
result.txt
新华网让新闻离你更近新闻中心时政人事
fenci.txt
新华网 让 新闻 离 你 更 近 新闻 中心 时政 人事
...全文
701 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xSeeker~ 2016-03-30
  • 打赏
  • 举报
回复
注意“人事”后面有个空格 问题就出在这,由于最后面有个空格,所以line.split(" "),后得到的列表,中会出现空字符串‘’,但在初始化static时,没有空字符串''这个key,所以static.get(i)是None,,也就是最后一行出现None的原因,没有static[‘’],所以就不能计算static[‘’] +=1
zwdnet 2016-03-30
  • 打赏
  • 举报
回复
问题基本解决,在进行统计前加一行,判断要统计的词是否已经是字典里的键了。如下,程序能正常运行了。

for i in allWords:
    if i in static.keys():
        static[i] += 1
可能就是在字典初始化的时候还没有那个“None”,但问题是那个"None"是怎么来的?
zwdnet 2016-03-30
  • 打赏
  • 举报
回复
引用 2 楼 bealing 的回复:
注意“人事”后面有个空格 问题就出在这,由于最后面有个空格,所以line.split(" "),后得到的列表,中会出现空字符串‘’,但在初始化static时,没有空字符串''这个key,所以static.get(i)是None,,也就是最后一行出现None的原因,没有static[‘’],所以就不能计算static[‘’] +=1
谢谢,我再查查怎么把那个空格给去掉。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧