如何将嵌套类别列表转换为多层Python字典结构?
将嵌套列表转换为层级Python字典
需求是将嵌套列表形式的产品类别转换为具有层级结构的字典,其中叶子节点(无后续子类别)的值为None,且支持任意层级的分类路径。
输入的分类列表
categories_list = [ ['computer', 'laptop'], ['computer', 'desktop'], ['computer', 'processor', 'Intel'], ['computer', 'processor', 'AMD'], ['computer', 'accessories', 'mouse'], ['computer', 'accessories', 'keyboard'], ['controller', 'raspberryPI'], ['controller', 'Arduino'], ['controller', 'accessories'], ['other'], ['electronics', 'other'] ]
期望输出的层级字典
categories_dict = { 'computer': {'laptop': None, 'desktop': None, 'processor': {'Intel': None, 'AMD': None}, 'accessories': {'mouse': None, 'keyboard': None}}, 'controller': {'raspberryPI': None, 'Arduino': None, 'accessories': None}, 'other': None, 'electronics': {'other': None} }
当前错误输出
现有代码无法正确生成深层嵌套结构,输出如下:
{'computer': {'AMD': None, 'Intel': None, 'accessories': None, 'desktop': None, 'keyboard': None, 'laptop': None, 'mouse': None, 'processor': None}, 'controller': {'Arduino': None, 'accessories': None, 'raspberryPI': None}, 'electronics': {'other': None}, 'other': {}}
解决方案代码
以下方法通过迭代遍历每个分类路径,逐层构建字典,支持任意层级的嵌套:
def build_category_dict(categories): result = {} for path in categories: current_level = result for index, category in enumerate(path): # 处理路径的最后一个节点,设为None if index == len(path) - 1: current_level[category] = None else: # 若当前节点不存在,创建空字典作为子节点 if category not in current_level: current_level[category] = {} # 移动到下一层级继续处理 current_level = current_level[category] return result # 测试示例 categories_list = [ ['computer', 'laptop'], ['computer', 'desktop'], ['computer', 'processor', 'Intel'], ['computer', 'processor', 'AMD'], ['computer', 'accessories', 'mouse'], ['computer', 'accessories', 'keyboard'], ['controller', 'raspberryPI'], ['controller', 'Arduino'], ['controller', 'accessories'], ['other'], ['electronics', 'other'] ] # 生成并打印结果 import pprint result_dict = build_category_dict(categories_list) pprint.pprint(result_dict)
代码说明
- 遍历每个分类路径(如
['computer', 'processor', 'Intel']),从根字典result开始逐层深入。 - 对于路径中的每个元素,判断是否为最后一个:
- 若是最后一个元素,直接将其值设为
None,标记为叶子节点。 - 若不是最后一个元素,检查当前层级字典中是否存在该键,不存在则创建空字典,然后将当前处理层级切换到这个子字典,继续处理下一个元素。
- 若是最后一个元素,直接将其值设为
- 这种方式可以处理任意深度的分类路径,确保嵌套结构正确生成。
内容的提问来源于stack exchange,提问作者Attila Toth
相关产品推荐
相关产品推荐

