You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python列表转换为层级字典结构适配HTML/JQuery菜单

嵌套分类列表转层级字典列表(适配HTML/JQuery菜单)

原始数据

categories = [
    ['Sports & Outdoors', 'Outdoor Recreation', 'Skates, Skateboards & Scooters'],
    ['Toys & Games', 'Learning & Education', 'Science Kits & Toys'],
    ['Toys & Games', 'Arts & Crafts', 'Craft Kits'],
    ['Toys & Games', 'Arts & Crafts', 'Drawing & Painting Supplies', 'Crayons'],
    ['Home & Kitchen', 'Home Décor', 'Window Treatments', 'Window Stickers & Films']
]

目标结构

categories = [
    {
        "name": 'Sports & Outdoors',
        "subcategory": [
            {
                "name": 'Outdoor Recreation',
                "subcategory": [
                    {
                        "name": 'Skates, Skateboards & Scooters',
                        "last": True
                    }
                ]
            }
        ]
    },
    {
        "name": 'Toys & Games',
        "subcategory": [
            {
                "name": 'Learning & Education',
                "subcategory": [
                    {
                        "name": 'Science Kits & Toys',
                        "last": True
                    }
                ]
            },
            {
                "name": 'Arts & Crafts',
                "subcategory": [
                    {
                        "name": 'Craft Kits',
                        "last": True
                    },
                    {
                        "name": 'Drawing & Painting Supplies',
                        "subcategory": [
                            {
                                "name": 'Crayons',
                                "last": True
                            }
                        ]
                    }
                ]
            },
        ]
    },
    {
        "name": 'Home & Kitchen',
        "subcategory": [
            {
                "name": 'Home Décor',
                "subcategory": [
                    {
                        "name": 'Window Treatments',
                        "subcategory": [
                            {
                                "name": 'Window Stickers & Films',
                                "last": True
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

解决方案

核心思路是用临时字典树快速去重分组,再转换为要求的列表结构:

实现代码

categories = [
    ['Sports & Outdoors', 'Outdoor Recreation', 'Skates, Skateboards & Scooters'],
    ['Toys & Games', 'Learning & Education', 'Science Kits & Toys'],
    ['Toys & Games', 'Arts & Crafts', 'Craft Kits'],
    ['Toys & Games', 'Arts & Crafts', 'Drawing & Painting Supplies', 'Crayons'],
    ['Home & Kitchen', 'Home Décor', 'Window Treatments', 'Window Stickers & Films']
]

# 用字典存储各层级节点,快速查找避免重复创建
tree_root = {}

for path in categories:
    current_level = tree_root
    for idx, name in enumerate(path):
        # 如果当前层级无此节点,创建新节点
        if name not in current_level:
            node = {"name": name}
            # 非末尾节点初始化subcategory字典(方便后续查找)
            if idx != len(path) - 1:
                node["subcategory"] = {}
            # 末尾节点添加last标记
            else:
                node["last"] = True
            current_level[name] = node
        # 移动到下一层级
        if idx != len(path) - 1:
            current_level = current_level[name]["subcategory"]

# 递归将字典结构转为要求的列表结构
def dict_to_list(node_dict):
    result = []
    for node in node_dict.values():
        if "subcategory" in node:
            node["subcategory"] = dict_to_list(node["subcategory"])
        result.append(node)
    return result

# 生成最终结构
final_categories = dict_to_list(tree_root)

代码说明

  1. 临时字典树:用字典存储每个层级的节点,键为分类名称,O(1)时间查找已存在节点,自动完成相同父节点的分组。
  2. 路径遍历:对每条分类路径,从顶级开始逐层向下,创建或进入节点。
  3. 末尾标记:遍历到路径最后一个元素时,给节点添加"last": True标记。
  4. 字典转列表:递归函数将临时字典结构转换为目标要求的列表格式,保留层级关系。

验证结果

可以用JSON格式化打印验证结构:

import json
print(json.dumps(final_categories, indent=4, ensure_ascii=False))

内容的提问来源于stack exchange,提问作者Kjobber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:20:45