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

Python添加字典元素时触发KeyError:1报错求助

解决Python字典的KeyError:1问题

我来帮你分析下报错的原因和具体解决办法:

问题根源

你的字典y一开始只初始化了y[0] = 0.2,但循环是从i=1到i=N-1(因为range(1,N)的取值范围是左闭右开)。当i=1时,y[i-1]是y[0],这时候没问题;但当i=2时,y[i-1]变成了y[1],而这个键在你的字典里从来没被定义过,Python就会抛出KeyError:1的报错。

解决方案

有两种实用的解决方式,你可以根据自己的需求选择:

方式一:在循环中给字典y补充新键

每次计算完yt[i]后,把它赋值给y[i],这样下一次循环就能正常获取前一个位置的值了。补全后的代码如下:

import numpy as np
import math
from math import *
x = { 0: 0.3 }
xt = {}
N=10
y = { 0: 0.2 }
yt = {}

def a(z,s):
    return sqrt(z)+s

def delta(r1,r2):
    sig=0.055
    d=sig*(np.sqrt(-2*np.log(r1))*np.cos(np.radians(r2)))
    return d

for i in range(1,N):
    R1=np.random.uniform(0,1)
    R2=np.random.uniform(0, 360)  # 补全你未写完的范围,因为delta里用到了弧度转换,这里默认取0-360度
    yt[i] = y[i-1] + delta(R1,R2)
    y[i] = yt[i]  # 将当前计算的yt值存入y,供下一次循环调用

方式二:改用列表代替字典

因为你的索引是连续的0到N-1,用列表比字典更适配场景,不仅代码更简洁,还能从根源避免键缺失的问题。改造后的代码:

import numpy as np
import math
from math import *

x = [0.3]
xt = []
N=10
y = [0.2]
yt = []

def a(z,s):
    return sqrt(z)+s

def delta(r1,r2):
    sig=0.055
    d=sig*(np.sqrt(-2*np.log(r1))*np.cos(np.radians(r2)))
    return d

for i in range(1,N):
    R1=np.random.uniform(0,1)
    R2=np.random.uniform(0, 360)
    next_val = y[i-1] + delta(R1,R2)
    yt.append(next_val)
    y.append(next_val)

小建议

如果你的数据是按顺序排列的连续索引,优先选择列表而非字典——列表的索引访问是天然连续的,不会出现键缺失的问题,代码维护起来也更简单。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:02:58