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

如何基于可变键列表动态更新嵌套字典的指定层级值?

解决方案:动态更新嵌套字典的指定层级值

这个问题我之前也碰到过!其实核心在于,functools.reduce()直接获取最内层的值时,你没法反向修改它的父节点。所以我们换个思路——拿到倒数第二层的字典和最后一个键,直接在父字典上修改对应键的值就行,具体实现如下:

基础实现(假设所有中间键已存在)

首先导入functools.reduce,然后写一个通用的更新函数:

from functools import reduce

def update_nested_dict(nested_dict, keys, new_value):
    # 遍历除最后一个键外的所有键,拿到倒数第二层的父字典
    parent_dict = reduce(lambda d, k: d[k], keys[:-1], nested_dict)
    # 获取最后一个键
    last_key = keys[-1]
    # 直接更新父字典中对应键的值
    parent_dict[last_key] = new_value

测试你的例子

# 你的初始数据
list_keys = ['master', 'sub1', 'sub2']
my_dict = {'master':{'sub1':{'sub2':5}}}

# 执行更新
update_nested_dict(my_dict, list_keys, 10)

# 查看结果
print(my_dict)  # 输出: {'master': {'sub1': {'sub2': 10}}}

进阶:自动创建不存在的中间键

如果你的嵌套字典可能缺少某些中间键,不想手动提前创建,可以用dict.setdefault()来自动生成空字典层级,修改后的函数如下:

from functools import reduce

def update_nested_dict_safe(nested_dict, keys, new_value):
    # 自动创建不存在的中间键对应的空字典
    parent_dict = reduce(lambda d, k: d.setdefault(k, {}), keys[:-1], nested_dict)
    last_key = keys[-1]
    parent_dict[last_key] = new_value

测试自动创建场景

my_dict = {}
update_nested_dict_safe(my_dict, ['a', 'b', 'c'], 20)
print(my_dict)  # 输出: {'a': {'b': {'c': 20}}}

原理说明

  • reduce(lambda d, k: d[k], keys[:-1], nested_dict):从原字典开始,依次遍历keys的前n-1个键,一步步深入到目标值的父字典。
  • 拿到父字典后,直接通过最后一个键赋值,就能修改原嵌套字典的对应层级——因为字典是可变对象,我们操作的是原字典的引用,所以修改会直接生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:17:43