# 第一种 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))