组合嵌套字典,分类下的标签 children

class getcontentTag(MethodView):

    def get(self):
        try:
            _sql_cate = "SELECT * FROM cate_a"
            cate_res = db.session.execute(text(_sql_cate)).fetchall()

            _sql_tag = "SELECT * FROM tag_a"
            tag_res = db.session.execute(text(_sql_tag)).fetchall()

            #将查询结果转换为字典列表
            categories = [dict(row._asdict()) for row in cate_res]
            tags = [dict(row._asdict()) for row in tag_res]

            # 构建类别字典,key为id,value为类别信息
            category_dict = {category['id']: category for category in categories}
            # print(category_dict)
            # # 初始化children列表
            for category in categories:
                # 空列表,存储子标签
                category['children'] = []
                # print(category)
            # #将标签添加到对应的类别中
            for tag in tags:
                # print(tag)
            #     # 如pid在category_dict中,则将标签添加到对应的类别中
                if tag['pid'] in category_dict:
            #         # 将标签添加到对应的类别的children列表中
                    category_dict[tag['pid']]['children'].append(tag)

            # # 提取根类别
            result = [category for category in categories if category['pid'] == 0]

            return jsonify({'code': Code.OK, 'msg': code_desc[Code.OK], 'data':result})

        except Exception as e:

            return jsonify({'code': Code.ERROR, 'msg': code_desc[Code.ERROR], 'data': None})

{
    "code": 200,
    "data": [
        {
            "children": [
                {
                    "id": 1,
                    "name": "体育鞋测评",
                    "pid": 1
                },
                {
                    "id": 2,
                    "name": "耳机评测",
                    "pid": 1
                }
            ],
            "id": 1,
            "name": "产品评测",
            "pid": 0
        },
        {
            "children": [
                {
                    "id": 3,
                    "name": "扑克",
                    "pid": 2
                },
                {
                    "id": 4,
                    "name": "打游戏",
                    "pid": 2
                },
                {
                    "id": 5,
                    "name": "打架",
                    "pid": 2
                }
            ],
            "id": 2,
            "name": "休闲娱乐",
            "pid": 0
        },
        {
            "children": [
                {
                    "id": 6,
                    "name": "伊斯兰教",
                    "pid": 3
                }
            ],
            "id": 3,
            "name": "宗教与信仰",
            "pid": 0
        },
        {
            "children": [
                {
                    "id": 7,
                    "name": "暖通空调",
                    "pid": 4
                }
            ],
            "id": 4,
            "name": "暖通空调",
            "pid": 0
        },
        {
            "children": [
                {
                    "id": 8,
                    "name": "特斯拉",
                    "pid": 5
                },
                {
                    "id": 9,
                    "name": "福特",
                    "pid": 5
                },
                {
                    "id": 10,
                    "name": "宝马",
                    "pid": 5
                }
            ],
            "id": 5,
            "name": "汽车",
            "pid": 0
        }
    ],
    "msg": "success"
}

posted @ 2025-01-17 09:53  乐乐乐乐乐乐樂  阅读(11)  评论(0)    收藏  举报
jQuery火箭图标返回顶部代码