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

Python中如何将带点分隔键的扁平字典转换为嵌套字典?问题求助及解决方案

如何将带圆点分隔键的扁平字典转换为多层嵌套字典?

我来帮你搞定这个问题!你想要把用圆点分隔键的扁平字典转换成多层嵌套结构,比如把{'deployment.easset': 'name', 'deployment.service.source': 'service'}转换成对应的嵌套字典对吧?先说说你原来代码的问题:

你写的代码里,每次循环拆分后的键片段时,直接给diccionary[i]赋值为[value],这会不断覆盖之前的键值,而且完全没有创建嵌套的字典结构,最后自然得不到你想要的多层效果。

可行的解决方案

这里有个能正确实现转换的函数,不管你的键有多少个层级都能处理:

def insert(data):
    res = {}
    for k, v in data.items():
        res_tmp = res
        levels = k.split(".")
        # 遍历除最后一层外的所有键,逐步构建嵌套字典
        for level in levels[:-1]:
            # setdefault方法:键不存在就创建空字典,存在则返回已有值,完美适配嵌套场景
            res_tmp = res_tmp.setdefault(level, {})
        # 给最内层的键赋值
        res_tmp[levels[-1]] = v
    return res

# 测试你的示例
result = insert({'deployment.easset': 'name', 'deployment.service.source': 'service'})
print(result)
# 输出结果:{'deployment': {'easset': 'name', 'service': {'source': 'service'}}}

# 测试更深层级的键
deep_result = insert({'deployment.easset.cosa.pepe.juan': 'name'})
print(deep_result)
# 输出:{'deployment': {'easset': {'cosa': {'pepe': {'juan': 'name'}}}}}

代码逻辑拆解

  • 先初始化一个空字典res,用来存最终的嵌套结果
  • 遍历原始字典的每一组键值对:
    • 把带圆点的键按.拆分成层级列表,比如'deployment.service.source'会变成['deployment', 'service', 'source']
    • 用res_tmp作为当前层级的临时引用,一开始指向最外层的res
    • 遍历除最后一个层级外的所有键,用setdefault方法一步步深入:如果当前层级的键不存在,就创建一个空字典并让res_tmp指向它;如果已经存在,就直接让res_tmp指向已有的字典
    • 最后把值赋给最内层的那个键,完成这一组键值对的嵌套转换

这样就能完美实现你想要的效果啦!

内容的提问来源于stack exchange,提问作者Andres Lorenzo Carvia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:07:36