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

如何基于给定列表构建树形结构字典make_dict?

实现方法

问题分析

给定列表 li = [1,1,2,2,4,4,4,7,5,5] 和索引列表 dict_index = [1,2,3,4,5,6,7,8,9,10],需要构建树形字典 make_dict,其中所有 dict_index 元素为key,有子节点的key对应子节点列表,无子女的key值为 ['x']。

实现步骤

  1. 初始化字典:先创建以 dict_index 所有元素为key的字典,默认值设为 ['x']。
  2. 推导父节点-子节点映射:观察目标字典规律,子节点数量等于对应父节点在 li 中的出现次数(仅1的次数需调整为1),且子节点是 dict_index 中按顺序的连续元素。
  3. 更新字典:按推导的映射关系覆盖默认值。

代码实现

自动推导版本

from collections import Counter

li = [1,1,2,2,4,4,4,7,5,5]
dict_index = [1,2,3,4,5,6,7,8,9,10]

# 初始化字典,所有key默认无子女
make_dict = {key: ['x'] for key in dict_index}

# 统计每个父节点的出现次数,调整1的次数以匹配目标结构
counts = Counter(li)
counts[1] = 1

# 按li中父节点出现顺序去重,保证分配顺序正确
unique_parents = []
seen = set()
for num in li:
    if num not in seen:
        seen.add(num)
        unique_parents.append(num)

# 从dict_index的第二个元素开始分配子节点
child_ptr = 1  # 指向dict_index的索引,对应第一个子节点2
for parent in unique_parents:
    child_count = counts[parent]
    # 截取对应数量的子节点
    children = dict_index[child_ptr:child_ptr+child_count]
    make_dict[parent] = children
    # 移动指针到下一组子节点的起始位置
    child_ptr += child_count

print(make_dict)

直接映射版本(适合已知明确关系的场景)

li = [1,1,2,2,4,4,4,7,5,5]
dict_index = [1,2,3,4,5,6,7,8,9,10]

# 初始化字典
make_dict = {key: ['x'] for key in dict_index}

# 手动定义父节点与子节点的映射
parent_children = {
    1: [2],
    2: [3,4],
    4: [5,6,7],
    7: [8],
    5: [9,10]
}

# 更新字典
for parent, children in parent_children.items():
    make_dict[parent] = children

print(make_dict)

说明

  • 自动推导版本无需手动维护映射关系,仅需根据 li 的规律调整计数逻辑即可适配类似场景。
  • 直接映射版本简单直观,适合父节点-子节点关系固定的情况。

内容的提问来源于stack exchange,提问作者김민수

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:15:48