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