Python中如何将嵌套字典的键作为参数传入函数以更新值?
解决嵌套字典指定键值的更新问题
你遇到的问题本质是Python中不可变类型(比如字符串)的传递特性——你传入函数的是sample_dict['a']['b']['c']的当前值(字符串"Bye"),而不是字典键的引用。函数里对key变量赋值,只是改变了这个局部变量的指向,完全不会影响原字典里的键值对。
下面给出两种可行的解决方案:
方案1:传入父字典和目标键名
直接把目标键所在的父字典和键名传给函数,函数可以直接修改父字典的键值:
sample_dict = { 'a':{'b':{'c':"Bye"},'f':{'d':"Tata"}},'g':{'e':"SeeYou"} } def value_modifier(parent_dict, key, new_value): parent_dict[key] = new_value # 传入c所在的父字典sample_dict['a']['b']和键名'c' value_modifier(sample_dict['a']['b'], 'c', new_value="Hi") print(sample_dict)
执行后输出:
{'a': {'b': {'c': 'Hi'}, 'f': {'d': 'Tata'}}, 'g': {'e': 'SeeYou'}}
方案2:传入键路径列表(适配深层嵌套)
如果嵌套层级不固定,可以传入键的路径列表(比如['a', 'b', 'c']),通过遍历路径找到最后一层的父字典,再修改目标键的值:
sample_dict = { 'a':{'b':{'c':"Bye"},'f':{'d':"Tata"}},'g':{'e':"SeeYou"} } def update_nested_dict(nested_dict, key_path, new_value): # 遍历到倒数第二个键,获取目标键的父字典 parent = nested_dict for key in key_path[:-1]: parent = parent[key] # 更新目标键的值 parent[key_path[-1]] = new_value update_nested_dict(sample_dict, ['a', 'b', 'c'], "Hi") print(sample_dict)
这种方法无需关心嵌套深度,通用性更强。
关于内存地址方法无效的原因
不可变类型(如字符串、数字、元组)的内存地址对应的内容无法修改,你只能让字典的键指向新的内存地址(即新的不可变对象)。因此必须通过操作字典本身来完成值的更新,而不是试图修改原不可变值的内存内容。
内容的提问来源于stack exchange,提问作者Tester
相关产品推荐
相关产品推荐

