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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:56:08