无限极分类的实现方法(面试题)
Posted chmily
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无限极分类的实现方法(面试题)相关的知识,希望对你有一定的参考价值。
递归实现无限极分类
data=[
{"cat_id":3,"name":"沙河","parent_id":1},
{"cat_id":4,"name":"sb镇","parent_id":3},
{"cat_id": 1, "name": "北京", "parent_id": 0},
{"cat_id":5,"name":"昌平","parent_id":1},
{"cat_id":6,"name":"青浦","parent_id":2},
{"cat_id": 2, "name": "上海", "parent_id": 0},
]
# 需求样式
'''
北京
-沙河
--sb镇
-昌平
上海
-青浦
'''
lis = []
def get_son(data,parent_id=0,level=0,is_clear=True):
if is_clear:
lis.clear()
# 遍历每一条数据对象
for item in data:
# 当 parent_id=0时,说明当前对象是父级
if item['parent_id']==parent_id:
item['level']=level
lis.append(item)
# 递归调用自身 ,继续遍历查找
get_son(data,parent_id=item["cat_id"],level=level+1,
is_clear=False) # 结果:[{'cat_id': 1, 'name': '北京', 'parent_id': 0, 'level': 0}, {'cat_id': 3, 'name': '沙河', 'parent_id': 1, 'level': 1}, {'cat_id': 4, 'name': 'sb镇', 'parent_id': 3, 'level': 2}, {'cat_id': 5, 'name': '昌平', 'parent_id': 1, 'level': 1}, {'cat_id': 2, 'name': '上海', 'parent_id': 0, 'level': 0}, {'cat_id': 6, 'name': '青浦', 'parent_id': 2, 'level': 1}]
用树实现无限极分类
def get_tree(data):
# 定义一个 空列表和空字典
lis = []
tree = {}
# 先循环遍历每一条数据
for item in data:
# 取出每一条数据的 cat_id ,并与当前遍历的数据重新组合放在自定义的 tree字典中,形式如:tree={3: {"cat_id":3,"name":"沙河","parent_id":1}, ...}
# 得到新组合的tree字典数据 tree = {3:{数据一},4:{数据二}, ...}
tree[item['cat_id']] = item
# 再定义一个变量遍历原每一条数据
for i in data:
# 如果当前遍历的数据对象中 'parent_id'值为0 (就是没有父级)
if not i['parent_id']:
# 1、获取到 tree 字典中与当前对象 对应的 数据对象,2、添加到自定义 lis 表中
lis.append(tree[i['cat_id']])
else:
# 如果当前数据对象 'parent_id'有值,(表示该数据是子级)
# 1、拿到 parent_id的 值
parent_id = i['parent_id']
# 2、通过上步骤拿到的 值 在tree 字典中找到对应的数据对象(父级),判断该对象中是否有 children 字段
if 'children' not in tree[parent_id]:
# 3、给父级数据对象添加 children 字段 并赋值为 []
tree[parent_id]['children'] = []
# 将当前变遍历对象添加到父级
# tree[parent_id]['children'].append(tree[i['cat_id']])
tree[parent_id]['children'].append(i) # 跟上步骤意思相同
return lis
# 结果:[{'cat_id': 1, 'name': '北京', 'parent_id': 0, 'children': [{'cat_id': 3, 'name': '沙河', 'parent_id': 1, 'children': [{'cat_id': 4, 'name': 'sb镇', 'parent_id': 3}]}, {'cat_id': 5, 'name': '昌平', 'parent_id': 1}]}, {'cat_id': 2, 'name': '上海', 'parent_id': 0, 'children': [{'cat_id': 6, 'name': '青浦', 'parent_id': 2}]}]
以上是关于无限极分类的实现方法(面试题)的主要内容,如果未能解决你的问题,请参考以下文章