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

如何将扁平化JSON键转换为嵌套字典路径以修改对应值

实现方案

方案1:手动遍历实现(兼容性最好,易扩展)

你可以通过拆分扁平化键为层级列表,逐层遍历到嵌套字典的最后一级父节点后赋值,该方案适配任意嵌套层数,也兼容单层键的场景。

示例代码如下:

# 初始数据
temp = {"a": {"b": {"c": 123}}}
flat = "a.b.c"
new_val = 456

# 通用嵌套字典赋值函数
def set_nested_value(data: dict, flat_key: str, value):
    # 拆分扁平化键为层级列表
    keys = flat_key.split('.')
    current_node = data
    # 遍历到最后一级的父节点
    for key in keys[:-1]:
        # 若需自动创建不存在的中间键,可放开下方注释代码
        # if key not in current_node:
        #     current_node[key] = {}
        current_node = current_node[key]
    # 给最终键赋值
    current_node[keys[-1]] = value

# 调用函数执行修改
set_nested_value(temp, flat, new_val)
print(temp) # 输出:{'a': {'b': {'c': 456}}}

如果需要读取嵌套值,也可以用对应逻辑的取值函数:

def get_nested_value(data: dict, flat_key: str):
    keys = flat_key.split('.')
    current_node = data
    for key in keys:
        current_node = current_node[key]
    return current_node

print(get_nested_value(temp, "a.b.c")) # 输出:456

方案2:基于functools.reduce实现(代码更简洁)

如果偏好简洁写法,可以用functools.reduce配合操作符快速实现:

from functools import reduce
import operator

def set_nested_value(data: dict, flat_key: str, value):
    keys = flat_key.split('.')
    # 直接获取最后一级的父节点
    parent_node = reduce(operator.getitem, keys[:-1], data)
    parent_node[keys[-1]] = value

def get_nested_value(data: dict, flat_key: str):
    return reduce(operator.getitem, flat_key.split('.'), data)

两种方案都支持任意嵌套层数的扁平化键,比如a.b.c.d.f或者单层的a都可以正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:01