为什么这个Python程序在更新字典时会引发错误?

时间:2014-04-11 15:55:42

标签: python file

给出的问题是我收到了一个带有文字的文件。我必须计算所有单词出现的次数。

到目前为止我尝试过:

def print_words(filename):
    input_file = open(filename, 'r')
    words = input_file.read().split()
    result = {}
    for word in words:
        if word in result:
            result.update({word:1})
        else:
            result[word] += 1
    for count in result:
        print(count + ' => ' + str(result[count]))

我得到的错误:

File "wordcount.py", line 50, in print_words
    result[word] += 1
KeyError: 'We'

任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:4)

当你迭代你的话时:

for word in words:
    if word in result:
        result.update({word:1})
    else:
        result[word] += 1

只有当word 已经存在时,才会result添加update if word in result:)。如果不存在,那么无论如何都要尝试添加一个值,而Python不能这样做,因此KeyError

最小修复是:

  1. 切换ifelse块内的线条;或
  2. 更改为if word not in result
  3. 或者,您可以使用collections.defaultdict简化:

    from collections import defaultdict
    
    result = defaultdict(int)
    
    for word in words:
        result[word] += 1
    

答案 1 :(得分:1)

目前,您说如果该项目已在字典中,请将其设置为1.但如果该项目不存在,则尝试重新分配该值。这显然是错误的方式。


要解决此问题,请替换:

if word in result:

使用:

if word not in result:

你走了,问题解决了。

答案 2 :(得分:1)

好的,发生的是变量word包含" We"。你试图在字典中增加计数器,但Python告诉你"我们"不是(还)字典中的一个关键。

这表示您的添加到字典逻辑中存在错误,实际上,只要该字典已经,您只需将该字添加到字典中>在字典中。取代

 if word in result:

 if word not in result:

你将会在途中。