Python字典操作遇KeyError:如何修改与添加字典元素?
问题分析与解决方案
错误原因
你遇到的KeyError是因为直接给不存在的顶层键'Eva'的子键'age'赋值时,Python找不到'Eva'这个键,无法直接操作它的嵌套字典。
修正后的代码
修改已有学生年龄
你修改John年龄的代码本身是有效的,因为'John'已存在于student_info中,直接访问嵌套字典的'age'键赋值即可:
student_info['John']['age'] = 21
添加新学生
要添加新学生,需先为'Eva'创建对应的嵌套字典,再设置属性,两种常用方式:
- 直接赋值完整嵌套字典:
student_info['Eva'] = {'age': 23, 'grade': 'A'} # 可一次性指定所有属性
- 先初始化空字典,再逐步添加属性:
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'] = 21get获取默认值: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
相关产品推荐
相关产品推荐

