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

如何将层级化产品分类列表转换为Python字典

层级分类列表转指定结构Python字典

需求说明

把一组层级化的产品分类列表,转换成嵌套字典与列表混合结构的Python字典,规则是:每个分类的最后一级子项以列表形式存储,上层分类以字典形式嵌套。

输入示例(中文翻译后)

['畜牧产品']
['畜牧产品', '家禽']
['畜牧产品', '家禽', '鸡']
['畜牧产品', '反刍动物']
['畜牧产品', '反刍动物', '山羊']
['畜牧产品', '反刍动物', '奶牛']
['食品杂货']
['食品杂货', '食品储藏柜']
['食品杂货', '食品储藏柜', '罐装/瓶装食品']
['食品杂货', '食品储藏柜', '罐装/瓶装食品', '汤类']
['食品杂货', '食品储藏柜', '罐装/瓶装食品', '蔬菜']

期望输出结构(中文翻译后)

{ 
  '畜牧产品': 
   {
    '家禽': ['鸡'],
    '反刍动物': ['山羊', '奶牛']
 },
 '食品杂货':{ 
    '食品储藏柜': {
      '罐装/瓶装食品': ['汤类', '蔬菜']
   }
  }
}

实现代码

def build_category_tree(categories):
    tree = {}
    for path in categories:
        current = tree
        # 处理仅含顶层分类的路径
        if len(path) == 1:
            if path[0] not in current:
                current[path[0]] = {}
            continue
        # 遍历到倒数第二个节点的父层级,确保字典结构存在
        for node in path[:-2]:
            if node not in current:
                current[node] = {}
            current = current[node]
        # 处理倒数第二个节点(父节点)和最后一个节点(叶子项)
        parent_node = path[-2]
        leaf_node = path[-1]
        # 初始化父节点对应的列表(若不存在)
        if parent_node not in current:
            current[parent_node] = []
        # 避免重复添加叶子项
        if leaf_node not in current[parent_node]:
            current[parent_node].append(leaf_node)
    return tree

# 测试用例
categories = [
    ['畜牧产品'],
    ['畜牧产品', '家禽'],
    ['畜牧产品', '家禽', '鸡'],
    ['畜牧产品', '反刍动物'],
    ['畜牧产品', '反刍动物', '山羊'],
    ['畜牧产品', '反刍动物', '奶牛'],
    ['食品杂货'],
    ['食品杂货', '食品储藏柜'],
    ['食品杂货', '食品储藏柜', '罐装/瓶装食品'],
    ['食品杂货', '食品储藏柜', '罐装/瓶装食品', '汤类'],
    ['食品杂货', '食品储藏柜', '罐装/瓶装食品', '蔬菜']
]

# 打印结果
import pprint
result = build_category_tree(categories)
pprint.pprint(result)

代码逻辑说明

  1. 初始化空字典作为分类树的根节点;
  2. 遍历每个分类路径:
    • 若路径仅含一个元素(顶层分类),直接在根字典中创建该分类对应的空字典;
    • 若路径长度大于1,先遍历到倒数第二个节点的父层级,确保每个中间节点都以字典形式存在;
    • 将倒数第二个节点作为父节点,初始化其对应的列表(若未创建),再将最后一个节点作为叶子项加入列表,同时避免重复添加;
  3. 最终返回构建好的分类树字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:06:53