如何将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)
代码说明
- 临时字典树:用字典存储每个层级的节点,键为分类名称,O(1)时间查找已存在节点,自动完成相同父节点的分组。
- 路径遍历:对每条分类路径,从顶级开始逐层向下,创建或进入节点。
- 末尾标记:遍历到路径最后一个元素时,给节点添加
"last": True标记。 - 字典转列表:递归函数将临时字典结构转换为目标要求的列表格式,保留层级关系。
验证结果
可以用JSON格式化打印验证结构:
import json print(json.dumps(final_categories, indent=4, ensure_ascii=False))
内容的提问来源于stack exchange,提问作者Kjobber
相关产品推荐
相关产品推荐

