python 根据parent_uuid自定义生成结构树

函数方法构建结构树

# 构建结构树
def node_tree(res_datas:list):
  """
  res_datas: [
    {"id": 1, "uuid": "sdghioeof943309ruad", "is_root": 1, "parent_uuid ": None, "data": "数据内容","root_uuid": "sdghioeof943309ruad"},
    {"id": 2, "uuid": "23a76rui2e3y6er1225", "is_root": 0, "parent_uuid ": "sdghioeof943309ruad", "data": "数据内容","root_uuid": "sdghioeof943309ruad"},
    {"id": 3, "uuid": "5gf34dk52j6gfs56trh", "is_root": 0, "parent_uuid ": "23a76rui2e3y6er1225", "data": "数据内容","root_uuid": "sdghioeof943309ruad"},
    {"id": 4, "uuid": "sf432k53fd4n2dfw9a7", "is_root": 0, "parent_uuid ": None, "data": "数据内容","root_uuid": "sf432k53fd4n2dfw9a7"}
  ]
  
  必要参数:
  # uuid 是每一条数据的唯一值
  # is_root 是判断是否是根节点数据
  # parent_uuid 作为父子级的关联关系, 根节点为None
  """

  node_map = {}   # 字典映射
  result_data = list()  # 结构树的结果

  # 第一遍:创建所有评论节点
  for node_data in res_datas:
      node_data['children'] = list() 
      node_map[node_data['uuid']] = node_data  
  # 第二遍:建立父子关系
  for node_data in res_datas:
      current_node = node_map[node_data['uuid']]
      if current_node['is_root'] == 1:  # 主节点,
          result_data.append(current_node)

      else:  # 子节点
          if current_node['parent_uuid'] in node_map:  
              parent_node = node_map[current_node['parent_uuid']]
              parent_node['children'].append(current_node)
  return result_data 

已知任意一个子节点,查找出其最初的根主节点

def find_root_node(node_map, current_node):
    """
    从当前节点开始向上查找,直到找到根节点(parent_id=0的最初的节点)
    
    参数:
        node_map: 字典,包含所有节点,键为节点ID,值为节点数据
        current_node: 当前节点
    
    返回:
        根节点
    """
    while True:
        parent_id = current_node['parent_id']
        if parent_id == 0: # 主节点
            return current_node  # 找到根节点
        
        # 获取父节点并继续向上查找
        current_node = node_map[parent_id]
posted @ 2025-06-06 09:28  二月雪  阅读(7)  评论(0)    收藏  举报