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

Python 3.6递归为字典添加嵌套路径键值对的实现方法

解决方案:迭代式实现(推荐)

要实现把嵌套路径对应的值添加到空字典中,核心是要区分路径的中间层级和最后一个层级——中间层级需要创建嵌套字典,最后一个层级直接赋值。这里给你一个简洁的迭代实现,完全适配Python 3.6+:

data = {}

def add_value(data, path, value):
    parts = path.split('.')
    current_dict = data
    # 遍历路径的前n-1个部分,创建嵌套字典
    for part in parts[:-1]:
        if part not in current_dict:
            current_dict[part] = {}
        current_dict = current_dict[part]
    # 给最后一个路径节点赋值
    current_dict[parts[-1]] = value

# 调用测试
add_value(data, "root.sub.item", 12)
print(data)  # 输出: {'root': {'sub': {'item': 12}}}

代码解释

  1. 拆分路径:用split('.')把路径拆分成层级列表,比如"root.sub.item"变成['root', 'sub', 'item']。
  2. 遍历中间层级:用parts[:-1]取到除最后一个节点外的所有部分,逐个检查是否存在于当前字典中,不存在就创建空字典,然后把current_dict指向这个新创建的子字典,逐步深入嵌套层级。
  3. 赋值最后节点:最后直接把值赋给最内层字典的最后一个路径节点。

原代码的问题

你提供的原代码没有区分中间节点和最后节点,会把所有路径部分都创建成空字典,最终item会是一个空字典而非目标值12,这就是不符合预期的原因。

递归式实现(可选)

如果你更喜欢递归思路,也可以这样写:

data = {}

def add_value_recursive(data, path, value):
    parts = path.split('.')
    # 递归终止条件:路径只剩最后一个节点,直接赋值
    if len(parts) == 1:
        data[parts[0]] = value
        return
    first_part = parts[0]
    # 如果当前节点不存在,创建空字典
    if first_part not in data:
        data[first_part] = {}
    # 递归处理剩余路径
    add_value_recursive(data[first_part], '.'.join(parts[1:]), value)

# 调用测试
add_value_recursive(data, "root.sub.item", 12)
print(data)  # 输出同样符合预期

递归的逻辑是:每次把路径拆分成第一个节点和剩余路径,逐步深入嵌套层级,直到路径只剩最后一个节点时完成赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:17