Python如何递归解析字典并构建嵌套Accordion组件?
如何递归解析多层嵌套字典,构建Dash的Accordion嵌套组件?
递归实现方案
递归的核心逻辑是遍历字典的每个键值对,对每个子字典递归处理,自动生成对应的嵌套Accordion/AccordionItem结构,彻底解决手动分层的繁琐问题。
针对演示类的递归实现
基于你提供的无依赖演示类,编写递归函数如下:
class Accordion: def __init__(self, list_): self.list_ = list_ def __str__(self): return f'Accordion({self.list_})' def append_(self, item): return self.list_.append(item) class AccordionItem: def __init__(self, list_, title): self.list_ = list_ self.title = title def __repr__(self): return f"AccordionItem('{self.list_}', title='{self.title}')" def build_accordion(nested_dict): # 创建当前层级的Accordion容器 accordion = Accordion([]) for title, child_dict in nested_dict.items(): if not child_dict: # 叶子节点(空字典) item = AccordionItem([], title) else: # 递归处理子字典,生成子Accordion child_accordion = build_accordion(child_dict) item = AccordionItem(child_accordion, title) accordion.append_(item) return accordion # 测试 d = {'1': {'1.1': {'1.1.1': {}}, '1.2': {'1.2.1': {}}}, '2': {'2.1': {'2.1.1': {}}, '2.2': {'2.2.2': {}}}} C = build_accordion(d) print(C)
运行后会生成和手动分层完全一致的结构,且支持任意深度的嵌套字典。
适配Dash Bootstrap Components的版本
对应到dbc组件,只需调整类和属性名称(将list_替换为children,直接操作children.append):
import dash_bootstrap_components as dbc def build_dbc_accordion(nested_dict): accordion = dbc.Accordion([]) for title, child_dict in nested_dict.items(): if not child_dict: item = dbc.AccordionItem([], title=title) else: child_accordion = build_dbc_accordion(child_dict) item = dbc.AccordionItem(child_accordion, title=title) accordion.children.append(item) return accordion # 测试 d = {'1': {'1.1': {'1.1.1': {}}, '1.2': {'1.2.1': {}}}, '2': {'2.1': {'2.1.1': {}}, '2.2': {'2.2.2': {}}}} C = build_dbc_accordion(d) print(C)
这段代码会生成你需要的嵌套Accordion结构,无论字典嵌套深度如何,都能自动适配。
逻辑说明
- 递归函数
build_accordion接收嵌套字典作为输入 - 遍历每个键值对,判断值是否为空字典:
- 空字典:视为最内层节点,创建子元素为空列表的
AccordionItem - 非空字典:递归调用函数处理子字典,得到子层级的
Accordion,再包装为当前层级的AccordionItem
- 空字典:视为最内层节点,创建子元素为空列表的
- 将所有生成的
AccordionItem添加到当前层级的Accordion子元素列表,最终返回该Accordion
内容的提问来源于stack exchange,提问作者Sterling Butters
相关产品推荐
相关产品推荐

