【发布时间】:2017-04-22 18:02:50
【问题描述】:
我试图通过构建一个字典来计算文件“xxxx”中的单词,其中键是单词,值是出现次数。到目前为止,我得到了这个:
fil = open("xxxx","r")
X = fil.read()
count = {}
for key in X.split():
count[key] += 1
for i in count:
print (i, count[i])
当我运行它时,我得到:
Traceback (most recent call last):
File "countword.py", line 9, in <module>
count[key] = count[key] + 1
KeyError: 'From'
'From' 是文件中的第一个单词,由于到目前为止还没有键 'From',我相信这是错误的原因。但是这样做的正确方法是什么?我还需要在进入 for 循环之前以某种方式初始化值吗?
【问题讨论】:
-
使用
collections.defaultdict -
第一次遇到一个词,key不存在所以
count[key]失败,看一个defaultdict。 -
您的基本问题是您试图添加一个不存在的值。这是
collections.defaultdict或dict.get()都可以解决的问题,但更好的解决方案是使用collections.Counter()为您计算。 -
@MartijnPieters everyone 在这里对
Counter赞不绝口,但我一直发现.get(value, 0) + 1作为计数器更快,Raymond Hettinger 在他的一个主题演讲中也推荐了它.是否有客观原因表明它更好,除了稍微不那么模棱两可的代码,我错过了? -
@roganjosh 移植到 Python 3 变得越来越容易。我会在工作中推动转换。 Python 2 是遗留的,很快就会消失(距离生命周期结束还有 3 年!)
标签: python dictionary hashmap