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

如何将树形结构转换为扁平数据结构?求Python实现思路

问题1:树形结构文本格式转换

给定树形结构:

1
   /   \
   2    3
  /\
 4  5

需要转换为:

1 1 1
   | | |
   2 2 3
   | |
   4 5

实现思路

  • 统计每个节点的叶子后代总数:根节点1的叶子是4、5、3,共3个,所以在第一行重复3次;节点2的叶子是4、5,共2个,第二行重复2次;节点3是叶子,重复1次;节点4、5各为叶子,各出现1次。
  • 按层级遍历树(如广度优先),对每一层的节点,根据其叶子后代数量重复节点值,拼接成当前行的文本。
  • 生成竖线连接行:每一行节点的下一行,需对应生成竖线行,竖线位置与下一行元素一一对应,用空格分隔;最后一行无需后续竖线行。
  • 控制每一行的缩进,可根据节点最大宽度和层级深度计算缩进量,保证整体对齐美观。
问题2:JSON层级结构扁平化展开

给定输入JSON:

{
    "id": "csiudfysd",
    "events": [
       {"value": "refuelling", "dates": ["23rd","24th"]}, 
       {"value": "deicing"}
    ]
}

对应树形结构:

"csiudfysd"   
           /        \
   "refuelling"    "deicing"
         /\
     23rd  24th

期望输出:

[
    {
        "id": "csiudfysd",
        "value": "refuelling",
        "date": "23rd"
    },
    {
        "id": "csiudfysd",
        "value": "refuelling",
        "date": "24th"
    },
    {
        "id": "csiudfysd",
        "value": "deicing"
    }
]

实现思路

  • 明确展开规则:根节点的id需保留在每个结果对象中;每个event的value必选,若event包含dates数组,则为每个日期生成含date字段的对象,否则生成仅含id和value的对象。
  • 遍历顶层的events数组,对每个event做分支处理:
    • 若存在dates字段,循环遍历dates中的每一项,将id、当前event的value和当前日期组合成新对象;
    • 若不存在dates字段,直接将id和当前event的value组合成新对象;
  • 收集所有生成的对象,组成最终结果数组,无需复杂的parent映射,直接基于顶层数据迭代拆解即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:44