父子分类与无限分类
一:父子分类#
'''
父子分类效果
1北京 0 2-海淀1 4--sb镇2 -昌平 3 上海 0 -青浦 --徐泾镇 -闵行 '''
data_dict = [ {"category_id": 1, "name": "北京", "parent_id": 0}, {"category_id": 2, "name": "上海", "parent_id": 0}, {"category_id": 3, "name": "沙河", "parent_id": 1}, {"category_id": 4, "name": "sb镇", "parent_id": 3}, {"category_id": 5, "name": "昌平", "parent_id": 1}, {"category_id": 6, "name": "青浦", "parent_id": 2}, ] res_list = [] def func(data_list, parent_id=0, level=0, is_clear=True): ''' :param data_list: 需要排序的数据 :param parent_id: 自关联的父id 默认0是属于父类 :param level: 显示排序的层级 默认0位第一层级 :return: ''' if is_clear: # 防止每次循环每次还有以前残留的数据 res_list.clear() for data in data_list: # 循环打印获取数据 # 首先判断是不是父类 if data['parent_id'] == parent_id: # 如果为父类显示层级为第一级 data['level'] = level # 将该循环的数据加入上述字典 res_list.append(data) # 循环第二层 .. # 第二层肯定是在上一层 + 1 但是parent_id是无序的 但是其肯定属于某个分类 func(data_list, level=level + 1, parent_id=data['category_id'], is_clear=False) return res_list res = func(data_dict) for i in res: print("-" * i['level'] + i['name'])
二:无限分类#
def func1(data_list): res_data = [] # 定义一个返回的列表的 所有数据存入该列表 tree = {} # 无限分类 类似于一个树为根节点 一个根节点 有很多支点 类似于字典 for i in data_list: tree[i['category_id']] = i # 给循环的数据加个id 作为标记记录 for data in data_list: # 判断是不是根节点 if not data['parent_id']: # 如果不是根节点 将其加入某个分类节点下 res_data.append(tree[data['category_id']]) else: # 如果是根节点 判断是否有子节点 if "children" not in tree[data['parent_id']]: # 如果没有子节点 添加子节点 tree[data['parent_id']]['children'] = [] # 添加个子节点 tree[data['parent_id']]['children'].append(tree[data['category_id']]) # 将子节点加入到某个分类下 return res_data
PS:此类的数据都是参照上述父子分类里的data_dict
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!