# 第一种 res_list = [ {\'cat_id\':1,\'name\':\'北京\',\'parent_id\':0}, {\'cat_id\':2,\'name\':\'杭州\',\'parent_id\':0}, {\'cat_id\':3,\'name\':\'海淀区\',\'parent_id\':1}, {\'cat_id\':4,\'name\':\'海淀xx小区\',\'parent_id\':3}, {\'cat_id\':6,\'name\':\'西湖区\',\'parent_id\':2}, {\'cat_id\':7,\'name\':\'三墩\',\'parent_id\':6}, ] # 创建结果集 res = [] def get_tree(data, level=0, parent_id=0, is_clear=True): # 第一次调用该方法,则清空列表内上次存放的结果 if is_clear: res.clear() # 循环匹配 for item in data: if item.get(\'parent_id\') == parent_id: # 用于记录当前记录的层级 item[\'level\'] = level # 将结果加入结果集 res.append(item) # 递归调用函数,继续执行,直到匹配完所有结果 get_tree(data, level=level+1, parent_id=item.get(\'cat_id\'), is_clear=False) return res get_tree(res_list) # 打印查看效果 print(res) for r in res: print(\'-\'*r.get(\'level\')+r.get(\'name\')) # 第二种 # (注意:可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。) res_list = [ {\'cat_id\':1,\'name\':\'北京\',\'parent_id\':0}, {\'cat_id\':2,\'name\':\'杭州\',\'parent_id\':0}, {\'cat_id\':3,\'name\':\'海淀区\',\'parent_id\':1}, {\'cat_id\':4,\'name\':\'海淀xx小区\',\'parent_id\':3}, {\'cat_id\':6,\'name\':\'西湖区\',\'parent_id\':2}, {\'cat_id\':7,\'name\':\'三墩\',\'parent_id\':6}, ] def get_son(data): # 创建结果集 res_list = [] # 创建空树 tree = {} # 将所有分枝加入树中 for item in data: tree[item.get(\'cat_id\')] = item for item in data: # 若parent_id为0,即为顶级标签,直接存入结果集 if item.get(\'parent_id\') == 0: res_list.append(item) else: # 获取当前分枝所在的主干 current_tree = tree.get(item.get(\'parent_id\')) if \'children\' not in current_tree: current_tree[\'children\'] = [] # 将分支加入主干中 current_tree.get(\'children\').append(item) # 返回结果 return res_list # 打印测试 print(get_son(city_list))