可爱的Python CDay−3练习2(字典dict)
可爱的Python网站https://wiki.woodpecker.org.cn/moin/ObpLovelyPython,该网站还有练习答案https://wiki.woodpecker.org.cn/moin/ObpLovelyPython/LpyAttAnswerCdays,可是,或许是因为内容太老的原因,有些代码在当前Python3中并不能正常运行,比如这题答案中的代码
练习2:读取某一简单索引文件 cdays−3-test.txt,其每行格式为:文档序号关键词,现须根据这些信息将它转化为倒排索引,即统计关键词在哪些文档中,格式如下:包含该关键词的文档数 关键词 => 文档序号。其中,原索引文件作为命令行参数传入主程序,并设计一个 collect 函式统计“关键字↔序号”结果对,最后在主程序中输出结果至屏幕。
cdays−3-test.txt 内容:
1 key1
2 key2
3 key1
7 key3
8 key2
10 key1
14 key2
19 key4
20 key1
30 key3
答案中append报错,我上网查了资料后修改完的代码如下,原代码出错的问题在于dict声明后的,key和value的默认类型为str,无法使用append方法(list才有的)
1 def collect(file): 2 lines = file.readlines() 3 mydict = dict() 4 5 for line in lines: 6 left, right = line.split() 7 mydict.setdefault(right, []).append(left) 8 9 return mydict 10 11 12 myfile = open("cdays−3-test.txt.txt") 13 14 mytmp = collect(myfile) 15 16 for (key, value) in mytmp.items(): 17 print("%d {%s:%s}" % (len(value), key, value))
运行截图如下