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

Python字典操作遇KeyError:如何修改与添加字典元素?

问题分析与解决方案

错误原因

你遇到的KeyError是因为直接给不存在的顶层键'Eva'的子键'age'赋值时,Python找不到'Eva'这个键,无法直接操作它的嵌套字典。

修正后的代码

修改已有学生年龄

你修改John年龄的代码本身是有效的,因为'John'已存在于student_info中,直接访问嵌套字典的'age'键赋值即可:

student_info['John']['age'] = 21

添加新学生

要添加新学生,需先为'Eva'创建对应的嵌套字典,再设置属性,两种常用方式:

  1. 直接赋值完整嵌套字典:
student_info['Eva'] = {'age': 23, 'grade': 'A'}  # 可一次性指定所有属性
  1. 先初始化空字典,再逐步添加属性:
student_info['Eva'] = {}
student_info['Eva']['age'] = 23
# 后续可继续添加grade等其他属性

完整可运行代码

student_info = {
    'John': {'age': 20, 'grade': 'A'},
    'Catherine': {'age': 22, 'grade': 'B'},
    'Bob': {'age': 21, 'grade': 'C'}
}

# 修改John的年龄
student_info['John']['age'] = 21

# 添加新学生Eva
student_info['Eva'] = {'age': 23, 'grade': 'B'}

print(student_info)

字典操作最佳实践

  • 安全访问嵌套键:若不确定顶层键是否存在,用dict.get()避免KeyError,比如修改年龄时:
    if student_info.get('John'):
        student_info['John']['age'] = 21
    
    或嵌套get获取默认值:
    current_age = student_info.get('John', {}).get('age', '未知')
    
  • 批量更新字典:用dict.update()批量修改或添加键值对,比如给已有学生更新多个属性:
    student_info['John'].update({'age': 21, 'grade': 'A+'})
    
  • 用collections.defaultdict简化嵌套操作:若频繁动态添加嵌套字典,defaultdict可自动初始化嵌套层:
    from collections import defaultdict
    
    student_info = defaultdict(lambda: {'age': None, 'grade': None})
    student_info['John']['age'] = 20
    student_info['Eva']['age'] = 23  # 不会触发KeyError
    
  • 避免过度嵌套:若字典嵌套超过2层,建议用类封装数据,提升代码可读性与维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:14