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

如何在Python LIST/DICT中新增元素?嵌套字典赋值报错解决

报错原因

直接执行data['d']['no']='4'会触发KeyError:Python原生字典访问不存在的键时,不会自动生成对应的嵌套结构。代码运行到data['d']时,顶级字典中不存在d这个键,自然无法对不存在的子对象做属性赋值,后续对不存在的lang列表做索引赋值也会触发同类错误。
另外就算提前创建了data['d']字典,如果没有初始化lang对应的列表,直接执行data['d']['lang'][0]='quattro'也会报错:空列表没有索引为0的元素,直接按索引赋值会触发IndexError。

正确实现方案

方案1:一次性整体赋值(最适配当前场景)

不需要逐层创建结构,直接给顶级键d赋完整的嵌套值即可,代码最简洁:

data={
  'a':{'no':'1','lang':['uno','one']},
  'b':{'no':'2','lang':['due','two']},
  'c':{'no':'3','lang':['tre','three']}
}

# 直接给不存在的顶级键d赋值完整结构
data['d'] = {'no':'4','lang':['quattro','four']}

print(data)

执行后字典会自动新增d对应的完整节点,无任何报错。

方案2:分步逐层赋值(适合需要逐段设置属性的场景)

如果业务逻辑要求必须分步给子属性赋值,需要先手动初始化每一层不存在的结构,再做赋值操作:

data={
  'a':{'no':'1','lang':['uno','one']},
  'b':{'no':'2','lang':['due','two']},
  'c':{'no':'3','lang':['tre','three']}
}

# 第一步:先初始化d对应的空字典,否则访问data['d']会报KeyError
data['d'] = {}
# 第二步:给d下的no字段赋值
data['d']['no'] = '4'
# 第三步:初始化d下的lang空列表,否则访问data['d']['lang']会报KeyError
data['d']['lang'] = []
# 第四步:给lang列表追加元素,不要直接对空列表做索引赋值
data['d']['lang'].append('quattro')
data['d']['lang'].append('four')

print(data)

操作列表注意:只有当列表索引位置已经存在元素时,才能用list[index] = value的方式修改值;新增元素优先用append()(末尾追加)、insert()(指定位置插入),或者直接给列表变量赋完整的列表值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:03:25