You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python中的KeyError: 2错误

如何解决Python中的KeyError: 2错误

嘿,我来帮你捋捋这个问题!首先咱们得搞清楚你为啥会碰到KeyError: 2——你的代码把列表索引和要统计的单词搞混了,导致程序试图访问一个根本不存在的字典键。

错误原因拆解

当你输入"hello hello"时,string.split()会得到列表["hello", "hello"],咱们一步步走一遍循环:

  1. 第一次循环:value=0,item="hello",此时字典里没有"hello",执行else分支,my_dict["hello"] = 1,字典变成{'hello': 1}。
  2. 第二次循环:value=1,item="hello",此时判断string[value](也就是"hello")在字典里,于是执行my_dict.update({value : my_dict[value+1]})——这里value是1,value+1就是2,但你的字典里从来没有键2,自然就触发了KeyError。

更关键的是,你本来要统计的是单词的出现次数,结果错误地把索引当成了字典的键,完全偏离了任务目标。

修正后的代码方案

我给你准备了几种不同的修正方法,从基础到进阶都有,你可以按需选择:

方法1:基础逻辑修正(最容易理解)

直接遍历每个单词,针对单词本身做计数:

my_dict = {}
string = input("Enter a string: ")
words = string.split()
for word in words:
    if word in my_dict:
        # 单词已存在,计数加1
        my_dict[word] += 1
    else:
        # 单词不存在,初始化计数为1
        my_dict[word] = 1

print(my_dict)

输入"hello hello"时,会输出{'hello': 2},完全符合你的需求。

方法2:用dict.get()简化代码

借助字典的get方法可以省去if-else判断,代码更简洁:

my_dict = {}
string = input("Enter a string: ")
words = string.split()
for word in words:
    # get方法会返回键对应的值,不存在则返回默认值0,之后加1更新计数
    my_dict[word] = my_dict.get(word, 0) + 1

print(my_dict)

方法3:用Python内置工具collections.Counter(进阶用法)

Python专门提供了统计元素次数的工具,一行就能搞定:

from collections import Counter

string = input("Enter a string: ")
words = string.split()
my_dict = Counter(words)

print(my_dict)

Counter会自动帮你统计每个单词的出现次数,非常省心。

小提醒

以后做这类统计任务时,一定要明确:字典的键应该是你要统计的目标元素(这里是单词),而不是列表的索引,这样就不会再犯类似的错误啦!

备注:内容来源于stack exchange,提问作者Logan w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:48:13