Python 如何解决 KeyError: 2

0 投票
2 回答
40 浏览
提问于 2025-04-13 15:24

我在Codehs上做一个题目时遇到了一个错误。我编程水平不太好,但我就是搞不清楚我哪里出错了。每次运行代码时,我都会遇到KeyError: 2的错误,我已经调试了一段时间。我的代码是用来接收用户输入的字符串,然后打印出每个单词在字符串中出现的次数,并把这些数量放到一个字典里,单词作为键。比如,当我输入“hello hello”时,我就会得到KeyError: 2的错误。下面是我的代码。任何帮助我解决这个问题的建议都非常感谢!

my_dict = {}
string = input("Enter a string: ")
string = string.split()
for value, item in enumerate(string):
    if string[value] in my_dict:
        my_dict.update({value : my_dict[value+1]})
    else:
        my_dict[item] = 1
    
print(my_dict)

我尝试了很多方法,比如调试和使用打印语句,但都没有成功。

2 个回答

0

我觉得第6行是你遇到的问题,你在尝试更新字典,以显示某个字符串出现了不止一次。你可以把它改成这样:

my_dict[item] += 1

这样做会把字典中某个项目的现有数字加1。

1

在你更新字典的时候,你搞混了想要更新的键(也就是你的子字符串 item)和它在分割列表中的索引/位置(value)。下面的代码可以解决这个问题(把你问题中的相应代码行替换掉):

if string[value] in my_dict:
    my_dict.update({item : my_dict[item]+1}) 

不过,这样做其实有点复杂,因为你可以直接更新字典的内容,方法如下:

if string[value] in my_dict:
    my_dict[item] += 1

另外要注意的是,你用 enumerate() 产生的 value 其实并不需要:它只是随着你分割字符串中的每个子字符串增加一,这对计算重复项并没有什么帮助。你现在使用 value 的方式可以很容易地用下面的方式替换掉:

for item in string:
    if item in my_dict:
        my_dict[item] += 1
    else:
        my_dict[item] = 1

撰写回答