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

如何将扁平化字典转换回嵌套字典?附嵌套转扁平实现代码

如何将扁平化字典还原为原始嵌套字典?

我已经用 Pandas 实现了嵌套字典转扁平化字典的逻辑:

make_flatten_dict = lambda d, sep: pd.json_normalize(d, sep=sep).to_dict(orient='records')[0]

输入原始嵌套字典:

original_dict = {'a': 1,'c': {'a': '#a_val', 'b': {'x': '#x_value', 'y' : '#y'}},'d': [1, '#d_i1', 3]}

转换后得到扁平化字典:

flat_dict = {'a': 1, 'd': [1, '#d_i1', 3], 'c.a': '#a_val', 'c.b.x': '#x_value', 'c.b.y': '#y'}

现在需要把这个扁平化字典还原回原始的嵌套结构。


实现方法

可以写一个自定义函数,按分隔符拆分扁平化字典的键,逐层构建嵌套字典:

def flatten_to_nested(flat_dict, sep):
    nested = {}
    for full_key, value in flat_dict.items():
        keys = full_key.split(sep)
        current_level = nested
        # 遍历层级键,创建嵌套节点
        for key in keys[:-1]:
            if key not in current_level:
                current_level[key] = {}
            current_level = current_level[key]
        # 赋值最后一层键的值
        current_level[keys[-1]] = value
    return nested

测试验证

用给定的扁平化字典测试:

flat_dict = {'a': 1, 'd': [1, '#d_i1', 3], 'c.a': '#a_val', 'c.b.x': '#x_value', 'c.b.y': '#y'}
restored_dict = flatten_to_nested(flat_dict, sep='.')
print(restored_dict)

输出结果和原始字典完全一致:

{'a': 1, 'd': [1, '#d_i1', 3], 'c': {'a': '#a_val', 'b': {'x': '#x_value', 'y': '#y'}}}

关键点

  • 函数会自动处理嵌套层级,遇到不存在的键则创建新的字典节点
  • 列表、数值等非字典类型的值会被直接保留,不会被错误嵌套

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:01:09