MST
星途 面试题库

面试题:Python中复杂嵌套字典值的修改及注意事项

有一个嵌套字典 `nested_dict = {'person': {'name': 'Bob', 'details': {'job': 'Engineer', 'city': 'New York'}}}`,要求将 `job` 的值修改为 `Manager`。请编写代码实现,并阐述在修改嵌套字典值时可能遇到的问题及如何避免。
21.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

代码实现

nested_dict = {'person': {'name': 'Bob', 'details': {'job': 'Engineer', 'city': 'New York'}}}
nested_dict['person']['details']['job'] = 'Manager'
print(nested_dict)

修改嵌套字典值时可能遇到的问题及避免方法

  1. 键不存在问题:如果要修改的键在嵌套字典中不存在,会抛出 KeyError。例如,若尝试修改不存在的键 nested_dict['person']['details']['salary'],就会出错。
    • 避免方法:在修改值之前,使用 in 关键字检查键是否存在。例如:
if'salary' in nested_dict['person']['details']:
    nested_dict['person']['details']['salary'] = 10000
  1. 数据结构错误问题:如果嵌套结构与预期不符,例如预期是字典,但实际是列表,就会导致类型错误。比如,若 nested_dict['person'] 实际是列表,nested_dict['person']['details']['job'] = 'Manager' 会报错。
    • 避免方法:在操作前确认数据结构的类型。可以使用 isinstance() 函数,例如:
if isinstance(nested_dict['person'], dict) and 'details' in nested_dict['person'] and isinstance(nested_dict['person']['details'], dict):
    nested_dict['person']['details']['job'] = 'Manager'
  1. 意外修改共享数据问题:如果多个变量引用了同一个嵌套字典,对其中一个变量的修改会影响其他变量。例如:
nested_dict = {'person': {'name': 'Bob', 'details': {'job': 'Engineer', 'city': 'New York'}}}
new_dict = nested_dict
new_dict['person']['details']['job'] = 'Manager'
print(nested_dict)  # 这里nested_dict的job也变为了Manager
- **避免方法**:使用深拷贝(`deepcopy`)来创建一个独立的副本,这样修改副本不会影响原始字典。需要导入 `copy` 模块:
import copy
nested_dict = {'person': {'name': 'Bob', 'details': {'job': 'Engineer', 'city': 'New York'}}}
new_dict = copy.deepcopy(nested_dict)
new_dict['person']['details']['job'] = 'Manager'
print(nested_dict)  # nested_dict不受影响