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

如何更新嵌套字典中的值?附POST请求用字典示例

如何更新嵌套字典内的指定键值

嘿,处理嵌套字典的更新确实是日常写Python时经常碰到的场景,我给你整理了几种实用的方法,从简单直接到通用灵活都有,你可以根据自己的需求选:

方法1:手动指定路径更新(适合明确知道键路径的简单场景)

如果你的更新需求很明确,比如只改几个固定位置的键,直接通过键路径赋值就完事了,简单粗暴还不容易出错。

举个例子,假设你的更新字典是这样的:

update_dict = {
    "scope_id": "user2",
    "input_params": {"pwd": "5678", "duration-in-mins": 30}
}

那直接这么写:

# 更新顶层键
request_dict["scope_id"] = update_dict["scope_id"]
# 更新嵌套在input_params里的键
request_dict["input_params"]["pwd"] = update_dict["input_params"]["pwd"]
request_dict["input_params"]["duration-in-mins"] = update_dict["input_params"]["duration-in-mins"]

这种方法的好处是直观,但如果要更新的键很多或者嵌套层级深,写起来就有点繁琐了。

方法2:结合update()方法处理顶层与单层嵌套

如果你的字典只有一层嵌套(比如只有input_params是嵌套字典),可以用字典自带的update()方法来简化代码:

update_dict = {
    "scope_id": "user2",
    "input_params": {"pwd": "5678", "duration-in-mins": 30}
}

# 先处理顶层的键(把非嵌套的键挑出来更新)
top_level_keys = [k for k in update_dict if k != "input_params"]
request_dict.update({k: update_dict[k] for k in top_level_keys})

# 再处理嵌套的input_params字典
if "input_params" in update_dict:
    request_dict["input_params"].update(update_dict["input_params"])

这样比手动一个个赋值要简洁,而且顶层键再多也不用重复写赋值语句。

方法3:递归通用更新函数(适合任意层级的嵌套字典)

如果你的字典嵌套层级不确定,或者以后可能会有更深的结构,写一个递归函数就一劳永逸了,不管嵌套多少层都能处理,还能自动添加新键(如果需要的话)。

先看函数实现:

def update_nested_dict(original_dict, update_dict):
    for key, new_value in update_dict.items():
        # 如果新值是字典,且原字典对应键也是字典,就递归更新
        if isinstance(new_value, dict) and key in original_dict and isinstance(original_dict[key], dict):
            update_nested_dict(original_dict[key], new_value)
        else:
            # 否则直接替换值(包括添加新键、修改非字典类型的值)
            original_dict[key] = new_value

然后调用示例:

# 你的原始字典
request_dict = {
    "scope_id": "user1",
    "tool_id": "appdynamics",
    "api_id": "get metrics names",
    "input_params": {"user": "abcd", "pwd": "1234", "acc_id": "ab12", "app_id": "TestApp", "metric-path": "ars", "time-range-type": "BEFORE_NOW", "duration-in-mins": 10},
    "output_filters": None
}

# 包含更新值的字典(可以有多层嵌套、新键、修改非字典值)
update_dict = {
    "scope_id": "user2",
    "input_params": {
        "pwd": "5678",
        "duration-in-mins": 30,
        "new_param": "new_value"  # 可以添加原字典没有的键
    },
    "output_filters": ["metric_name_1", "metric_name_2"]  # 把原来的None改成列表
}

# 执行更新
update_nested_dict(request_dict, update_dict)

执行完后,request_dict里对应的键就都更新好了,甚至还能自动添加新的键值对。如果不想添加新键,只更新已存在的键,可以稍微修改函数,加上if key in original_dict的判断再处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:37:44