8  循环与套嵌

8.1 遍历层次不定的迭代体

8.1.1 按层级顺序打印字典所有元素的值

def traverse_elements(elements):
    for element in elements:
        # 处理当前层级的元素
        print(element['name'])
        
        # 如果当前元素包含子元素,则递归调用 traverse_elements 函数
        if element.get('children'):  # children不为空时再次遍历
                traverse_elements(element['children'])

# 示例数据结构
elements = [
    {'name': 'A'},
    {'name': 'B', 'children': [
        {'name': 'B1'},
        {'name': 'B2', 'children': [
            {'name': 'B2.1'}
        ]}
    ]},
    {'name': 'C'}
]

# 调用遍历函数
traverse_elements(elements)
A
B
B1
B2
B2.1
C

8.2 将字典所有层级的列表的值通过函数转换

def apply_function_to_lists(d, f):
    for key, value in d.items():
        if isinstance(value, list):
            d[key] = [f(x) for x in value]
        elif isinstance(value, dict):
            apply_function_to_lists(value, f)
    return d

# 示例函数f,将元素加倍
def double(x):
    return 2 * x

# 示例输入字典
input_dict = {
    'a': [1, 2, 3],
    'b': {
        'c': [4, 5, 6],
        'd': {
            'e': [7, 8, 9]
        }
    }
}

# 应用函数转换
output_dict = apply_function_to_lists(input_dict, double)

print(output_dict)
{'a': [2, 4, 6], 'b': {'c': [8, 10, 12], 'd': {'e': [14, 16, 18]}}}
# 改写成从最底层开始向上层处理,

def apply_function_to_lists(d, f):
    if isinstance(d, dict):
        for key, value in d.items():
            if isinstance(value, dict):
                apply_function_to_lists(value, f)
            elif isinstance(value, list):
                d[key] = [f(x) for x in value]
    elif isinstance(d, list):
        for i in range(len(d)):
            if isinstance(d[i], dict) or isinstance(d[i], list):
                apply_function_to_lists(d[i], f)
            else:
                d[i] = f(d[i])
    print(d)
    return d

# 示例函数f,将元素加倍
def double(x):
    return 2 * x

# 示例输入字典
input_dict = {
    'a': [1, 2, 3],
    'b': {
        'c': [4, 5, 6],
        'd': {
            'e': [7, 8, 9]
        }
    }
}

# 应用函数转换
output_dict = apply_function_to_lists(input_dict, double)

print(output_dict)
{'e': [14, 16, 18]}
{'c': [8, 10, 12], 'd': {'e': [14, 16, 18]}}
{'a': [2, 4, 6], 'b': {'c': [8, 10, 12], 'd': {'e': [14, 16, 18]}}}
{'a': [2, 4, 6], 'b': {'c': [8, 10, 12], 'd': {'e': [14, 16, 18]}}}
## 从底层向上遍历方法2
def print_nested_dicts(data):
    stack = [(data, '')]

    while stack:
        current, path = stack.pop()

        if isinstance(current, dict):
            for key, value in current.items():
                stack.append((value, path + '.' + key))
        else:
            print(path[1:] + ':', current)

# 示例 JSON 数据
json_data = {
    "key1": {
        "nested_key1": "value1",
        "nested_key2": "value2"
    },
    "key2": {
        "nested_key3": "value3",
        "nested_key4": "value4",
        "nested_key5": [{
            "deeply_nested_key1": {
                "more_deeply_nested_key1":"value5"}
        },
                        {
            "deeply_nested_key2": "value6"
        }
                       ],
        "nested_key6": {
            "deeply_nested_key": "value7"
        }
    }
}

# 调用函数开始遍历并打印最小单元的字典
print_nested_dicts(json_data)
key2.nested_key6.deeply_nested_key: value7
key2.nested_key5: [{'deeply_nested_key1': {'more_deeply_nested_key1': 'value5'}}, {'deeply_nested_key2': 'value6'}]
key2.nested_key4: value4
key2.nested_key3: value3
key1.nested_key2: value2
key1.nested_key1: value1

8.3 字典:可引用迭代

字典是可引用迭代,列表、元组都是不可引用迭代。可引用迭代无论是在循环体内,还是循环体外初始化,后续键值的变化会改变初始化字典的值。解决方法:迭代前用copy或者写在循环体内,每次均初始化。

  • 正确示例
import pandas as pd
row = {'文件类型': '.json'}
data = []

for file_type in ["json", "docx", "pdf", "txt"]:
    new_row = row.copy()
    new_row['文件类型'] = file_type
    data.append(new_row)

pd.DataFrame(data)
文件类型
0 json
1 docx
2 pdf
3 txt
data = []
for file_type in ["json", "docx", "pdf", "txt"]:
    row = {'文件类型': '.json'}
    row['文件类型'] = file_type
    data.append(row)

pd.DataFrame(data)
文件类型
0 json
1 docx
2 pdf
3 txt
  • 错误写法
row = {'文件类型': '.json'}
data = []

for file_type in ["json", "docx", "pdf", "txt"]:
    row['文件类型'] = file_type
    data.append(row)

pd.DataFrame(data)
文件类型
0 txt
1 txt
2 txt
3 txt

8.4 应用举例

8.4.1 markdown转linkDict

Dash里的fac.AntdAnchor组件用到,以生成导航。

import re

markdownstr = '''
# 1 指标1 ICU医疗质量
## 1.1 ICU患者收治率
## 1.2 ICU患者收治床日率
## 1.3 急性生理与慢性健康评分(APACHEⅡ评分)≥15分患者收治率
## 1.4 感染性休克3h集束化治疗(bundle)完成率
## 1.5 感染性休克6h集束化治疗(bundle)完成率
## 1.6 ICU抗菌药物治疗前病原学送检率
## 1.7 ICU深静脉血栓(DVT)预防率
## 1.8 ICU患者预计病死率
## 1.9 ICU非计划气管插管拔管率
## 1.10 ICU气管插管拔管后48h内再插管率
## 1.11 非计划转入ICU率
## 1.12 非计划转入ICU率
## 1.13 ICU呼吸机相关性肺炎(VAP)发病率
### 1.13.1 本ICU本年度收治VAP患者的致病菌分布情况
### 1.13.2 本ICU本年度收治的VAP患者的抗生素使用情况
## 1.14 ICU血管内导管相关血流感染(CRBSI)发病率
### 1.14.1 本ICU本年度收治CRBSI患者的致病菌分布情况
### 1.14.2 本ICU本年度收治的CRBSI患者的抗生素使用情况
## 1.15 ICU导尿管相关泌尿系感染(CAUTI)发病率
# 2 指标2 针对脓毒症休克抗感染使用情况调查
## 2.1 脓毒症休克的人群指标
### 2.1.1 本ICU本年度收治的脓毒症休克患者性别、年龄构成
## 2.2 本ICU本年度收治的脓毒症休克患者的感染灶情况
## 2.3 本ICU本年度收治的脓毒症休克患者的致病菌分布情况
## 2.4 本ICU本年度收治的脓毒症休克患者的抗生素使用情况
# 3 指标3 针对ARDS患者管理情况调查
## 3.1 ARDS患者的人群指标
## 3.2 本ICU本年度收治的ARDS患者严重程度分级
## 3.3 本ICU本年度收治的ARDS患者病因统计
### 3.3.1 本ICU本年度收治的ARDS原发病因分布情况
### 3.3.2 本ICU本年度收治的肺内源性ARDS病原微生物分布情况
## 3.4 本ICU本年度收治的ARDS治疗情况
## 3.5 本ICU本年度收治的ARDS转归情况
'''


def extract_links(markdown_content):
    links = []
    stack = []

    for line in markdown_content.split('\n'):
        match = re.match(r'^(#+)\s+(\d+(\.\d+)*)\s*(.*)', line)
        if match:
            level = len(match.group(1))
            id = match.group(2)
            title = match.group(2) + match.group(4)
            href = f'#{id}'
            link = {'title': title, 'href': href, 'children': []}

            while stack and stack[-1]['level'] >= level:
                stack.pop()

            if stack:
                stack[-1]['item']['children'].append(link)
            else:
                links.append(link)

            stack.append({'level': level, 'item': link})

    return links

links = extract_links(markdownstr)

# Print the result
import json

print(json.dumps(links, indent=2, ensure_ascii=False))
[
  {
    "title": "1指标1 ICU医疗质量",
    "href": "#1",
    "children": [
      {
        "title": "1.1ICU患者收治率",
        "href": "#1.1",
        "children": []
      },
      {
        "title": "1.2ICU患者收治床日率",
        "href": "#1.2",
        "children": []
      },
      {
        "title": "1.3急性生理与慢性健康评分(APACHEⅡ评分)≥15分患者收治率",
        "href": "#1.3",
        "children": []
      },
      {
        "title": "1.4感染性休克3h集束化治疗(bundle)完成率",
        "href": "#1.4",
        "children": []
      },
      {
        "title": "1.5感染性休克6h集束化治疗(bundle)完成率",
        "href": "#1.5",
        "children": []
      },
      {
        "title": "1.6ICU抗菌药物治疗前病原学送检率",
        "href": "#1.6",
        "children": []
      },
      {
        "title": "1.7ICU深静脉血栓(DVT)预防率",
        "href": "#1.7",
        "children": []
      },
      {
        "title": "1.8ICU患者预计病死率",
        "href": "#1.8",
        "children": []
      },
      {
        "title": "1.9ICU非计划气管插管拔管率",
        "href": "#1.9",
        "children": []
      },
      {
        "title": "1.10ICU气管插管拔管后48h内再插管率",
        "href": "#1.10",
        "children": []
      },
      {
        "title": "1.11非计划转入ICU率",
        "href": "#1.11",
        "children": []
      },
      {
        "title": "1.12非计划转入ICU率",
        "href": "#1.12",
        "children": []
      },
      {
        "title": "1.13ICU呼吸机相关性肺炎(VAP)发病率",
        "href": "#1.13",
        "children": [
          {
            "title": "1.13.1本ICU本年度收治VAP患者的致病菌分布情况",
            "href": "#1.13.1",
            "children": []
          },
          {
            "title": "1.13.2本ICU本年度收治的VAP患者的抗生素使用情况",
            "href": "#1.13.2",
            "children": []
          }
        ]
      },
      {
        "title": "1.14ICU血管内导管相关血流感染(CRBSI)发病率",
        "href": "#1.14",
        "children": [
          {
            "title": "1.14.1本ICU本年度收治CRBSI患者的致病菌分布情况",
            "href": "#1.14.1",
            "children": []
          },
          {
            "title": "1.14.2本ICU本年度收治的CRBSI患者的抗生素使用情况",
            "href": "#1.14.2",
            "children": []
          }
        ]
      },
      {
        "title": "1.15ICU导尿管相关泌尿系感染(CAUTI)发病率",
        "href": "#1.15",
        "children": []
      }
    ]
  },
  {
    "title": "2指标2 针对脓毒症休克抗感染使用情况调查",
    "href": "#2",
    "children": [
      {
        "title": "2.1脓毒症休克的人群指标",
        "href": "#2.1",
        "children": [
          {
            "title": "2.1.1本ICU本年度收治的脓毒症休克患者性别、年龄构成",
            "href": "#2.1.1",
            "children": []
          }
        ]
      },
      {
        "title": "2.2本ICU本年度收治的脓毒症休克患者的感染灶情况",
        "href": "#2.2",
        "children": []
      },
      {
        "title": "2.3本ICU本年度收治的脓毒症休克患者的致病菌分布情况",
        "href": "#2.3",
        "children": []
      },
      {
        "title": "2.4本ICU本年度收治的脓毒症休克患者的抗生素使用情况",
        "href": "#2.4",
        "children": []
      }
    ]
  },
  {
    "title": "3指标3 针对ARDS患者管理情况调查",
    "href": "#3",
    "children": [
      {
        "title": "3.1ARDS患者的人群指标",
        "href": "#3.1",
        "children": []
      },
      {
        "title": "3.2本ICU本年度收治的ARDS患者严重程度分级",
        "href": "#3.2",
        "children": []
      },
      {
        "title": "3.3本ICU本年度收治的ARDS患者病因统计",
        "href": "#3.3",
        "children": [
          {
            "title": "3.3.1本ICU本年度收治的ARDS原发病因分布情况",
            "href": "#3.3.1",
            "children": []
          },
          {
            "title": "3.3.2本ICU本年度收治的肺内源性ARDS病原微生物分布情况",
            "href": "#3.3.2",
            "children": []
          }
        ]
      },
      {
        "title": "3.4本ICU本年度收治的ARDS治疗情况",
        "href": "#3.4",
        "children": []
      },
      {
        "title": "3.5本ICU本年度收治的ARDS转归情况",
        "href": "#3.5",
        "children": []
      }
    ]
  }
]

8.4.2 markdown转分级字典

可引申为其他应用

import json
import re

def generate_links_dict(markdown_content, match_pattern):
    links = []
    stack = [(-1, {'children': links})]
    level_counters = [0]

    for line in markdown_content.split('\n'):
        match = re.match(match_pattern, line)
        if match:
            level = len(match.group(1))
            id = match.group(2)
            title = match.group(3).strip()
            href = f'#{id}'
            link = {'title': title, 'href': href, 'children': []}

            while len(level_counters) > level:
                level_counters.pop()
            while len(level_counters) < level:
                level_counters.append(0)

            level_counters[-1] += 1
            level_numbers = '.'.join(str(c) for c in level_counters)

            stack[level - 1][1]['children'].append(link)
            stack[level:] = [(level, link)]

            link['level_number'] = level_numbers

    return json.dumps(links, indent=2, ensure_ascii=False)

markdownstr='''
# major-complaint 主诉 
# presenting-history 现病史
## present-condition 病情现状
## history-of-present-illness 发病经过
# past-history 既往史
# system-review 系统回顾
## cardiovascular-system 心血管系统
### heart 心脏
#### heart-visual-examination 心脏视诊
#### heart-palpation 心脏触诊
## respiratory-system 呼吸系统
### lung 肺
#### lung-visual-examination 肺视诊
#### lung-palpation 肺触诊
'''
match_pattern = r'^(#+)\s+([a-z-]+)\s*(.*)'
link_dict = generate_links_dict(markdownstr, match_pattern)

print(link_dict)
[
  {
    "title": "主诉",
    "href": "#major-complaint",
    "children": [],
    "level_number": "1"
  },
  {
    "title": "现病史",
    "href": "#presenting-history",
    "children": [
      {
        "title": "病情现状",
        "href": "#present-condition",
        "children": [],
        "level_number": "2.1"
      },
      {
        "title": "发病经过",
        "href": "#history-of-present-illness",
        "children": [],
        "level_number": "2.2"
      }
    ],
    "level_number": "2"
  },
  {
    "title": "既往史",
    "href": "#past-history",
    "children": [],
    "level_number": "3"
  },
  {
    "title": "系统回顾",
    "href": "#system-review",
    "children": [
      {
        "title": "心血管系统",
        "href": "#cardiovascular-system",
        "children": [
          {
            "title": "心脏",
            "href": "#heart",
            "children": [
              {
                "title": "心脏视诊",
                "href": "#heart-visual-examination",
                "children": [],
                "level_number": "4.1.1.1"
              },
              {
                "title": "心脏触诊",
                "href": "#heart-palpation",
                "children": [],
                "level_number": "4.1.1.2"
              }
            ],
            "level_number": "4.1.1"
          }
        ],
        "level_number": "4.1"
      },
      {
        "title": "呼吸系统",
        "href": "#respiratory-system",
        "children": [
          {
            "title": "肺",
            "href": "#lung",
            "children": [
              {
                "title": "肺视诊",
                "href": "#lung-visual-examination",
                "children": [],
                "level_number": "4.2.1.1"
              },
              {
                "title": "肺触诊",
                "href": "#lung-palpation",
                "children": [],
                "level_number": "4.2.1.2"
              }
            ],
            "level_number": "4.2.1"
          }
        ],
        "level_number": "4.2"
      }
    ],
    "level_number": "4"
  }
]

8.4.3 应用于dash的组件布局

8.4.3.1 生成title层级字典,包括层级序号

markdown_str = '''
# 地方支持情况 
## 地方支持情况
### 省级卫生行政部门规划、政策制定、长效机制建设及投入情况

# 医院管理情况
## 医院整体管理情况
### 组织管理体系
### 医院发展规划
### 预算管理制度
### 数据信息报告情况(HQMS、NCIS、医疗技术临床应用管理等信息系统)
### 单病种质量管理等质控工作情况
## 医院对专科支持情况
### 扶持政策或措施
### 软、硬件支持

# 专科建设与服务情况
## 专科建设
### 亚专科建设
### 本专科技术特色
## 住院患者医疗服务能力(近3年)
### 本专科DRGs组数
### 本专科病例组合指数(CMI)
### 本专科四级手术占比(外科为主)
### 本专科微创手术占比(外科为主)
### 本专科RW≥2的病例占比
## 住院患者医疗服务效率(近3年)
### 本专科费用消耗指数
### 本专科时间消耗指数
### 本专科术前住院天数
## 住院患者医疗质量安全(近3年)
### 本专科中低风险组死亡率
### 本专科急危重病例救治能力
### 本专科非计划重返手术室再手术率
## 技术突破与创新基础
### 本专科国家级科研项目数(近3年)
### 本专科有希望近期取得突破性进展的医疗技术研究项目(重点关注再生医学、生物医学新技术、人工智能、精准医疗等方面)

# 人才队伍建设情况 
## 人才梯队建设
### 本专科人员基本结构情况
### 本专科梯队结构配置情况
### 亚专科学科带头人及骨干发展情况

# 专业影响力
## 医疗辐射能力(近3年)
### 本专科年出院患者中省外(国外)患者比例
### 本专科年接受下级医院急危重症和疑难病患者转诊数量
## 声誉和影响力(近5年)
### 本专科带头人是否为国家、省级质控中心专家委员会成员等情况
'''

def generate_title_dict(markdown_content, match_pattern):
    links = []
    stack = [(-1, {'children': links})]
    level_counters = [0]

    for line in markdown_content.split('\n'):
        match = re.match(match_pattern, line)
        if match:
            level = len(match.group(1))
            title = match.group(2).strip()

            # 根据level和level_counts确定level_numbers
            while len(level_counters) > level:
                level_counters.pop()
            while len(level_counters) < level:
                level_counters.append(0)
            level_counters[-1] += 1
            level_numbers = '.'.join(str(c) for c in level_counters)
            
            id = level_numbers
            href = f'#{level_numbers}'
            link = {'title': title, 'id':id, 'href': href, 'children': []}

            stack[level - 1][1]['children'].append(link)
            stack[level:] = [(level, link)]
            link['level_number'] = level_numbers

    return links

match_pattern = r'^(#+)\s*(.*)'
link_dict = generate_title_dict(markdown_str, match_pattern)

print(
    (json
       .dumps(link_dict, 
              indent=2, 
              ensure_ascii=False)
    )
        )
[
  {
    "title": "地方支持情况",
    "id": "1",
    "href": "#1",
    "children": [
      {
        "title": "地方支持情况",
        "id": "1.1",
        "href": "#1.1",
        "children": [
          {
            "title": "省级卫生行政部门规划、政策制定、长效机制建设及投入情况",
            "id": "1.1.1",
            "href": "#1.1.1",
            "children": [],
            "level_number": "1.1.1"
          }
        ],
        "level_number": "1.1"
      }
    ],
    "level_number": "1"
  },
  {
    "title": "医院管理情况",
    "id": "2",
    "href": "#2",
    "children": [
      {
        "title": "医院整体管理情况",
        "id": "2.1",
        "href": "#2.1",
        "children": [
          {
            "title": "组织管理体系",
            "id": "2.1.1",
            "href": "#2.1.1",
            "children": [],
            "level_number": "2.1.1"
          },
          {
            "title": "医院发展规划",
            "id": "2.1.2",
            "href": "#2.1.2",
            "children": [],
            "level_number": "2.1.2"
          },
          {
            "title": "预算管理制度",
            "id": "2.1.3",
            "href": "#2.1.3",
            "children": [],
            "level_number": "2.1.3"
          },
          {
            "title": "数据信息报告情况(HQMS、NCIS、医疗技术临床应用管理等信息系统)",
            "id": "2.1.4",
            "href": "#2.1.4",
            "children": [],
            "level_number": "2.1.4"
          },
          {
            "title": "单病种质量管理等质控工作情况",
            "id": "2.1.5",
            "href": "#2.1.5",
            "children": [],
            "level_number": "2.1.5"
          }
        ],
        "level_number": "2.1"
      },
      {
        "title": "医院对专科支持情况",
        "id": "2.2",
        "href": "#2.2",
        "children": [
          {
            "title": "扶持政策或措施",
            "id": "2.2.1",
            "href": "#2.2.1",
            "children": [],
            "level_number": "2.2.1"
          },
          {
            "title": "软、硬件支持",
            "id": "2.2.2",
            "href": "#2.2.2",
            "children": [],
            "level_number": "2.2.2"
          }
        ],
        "level_number": "2.2"
      }
    ],
    "level_number": "2"
  },
  {
    "title": "专科建设与服务情况",
    "id": "3",
    "href": "#3",
    "children": [
      {
        "title": "专科建设",
        "id": "3.1",
        "href": "#3.1",
        "children": [
          {
            "title": "亚专科建设",
            "id": "3.1.1",
            "href": "#3.1.1",
            "children": [],
            "level_number": "3.1.1"
          },
          {
            "title": "本专科技术特色",
            "id": "3.1.2",
            "href": "#3.1.2",
            "children": [],
            "level_number": "3.1.2"
          }
        ],
        "level_number": "3.1"
      },
      {
        "title": "住院患者医疗服务能力(近3年)",
        "id": "3.2",
        "href": "#3.2",
        "children": [
          {
            "title": "本专科DRGs组数",
            "id": "3.2.1",
            "href": "#3.2.1",
            "children": [],
            "level_number": "3.2.1"
          },
          {
            "title": "本专科病例组合指数(CMI)",
            "id": "3.2.2",
            "href": "#3.2.2",
            "children": [],
            "level_number": "3.2.2"
          },
          {
            "title": "本专科四级手术占比(外科为主)",
            "id": "3.2.3",
            "href": "#3.2.3",
            "children": [],
            "level_number": "3.2.3"
          },
          {
            "title": "本专科微创手术占比(外科为主)",
            "id": "3.2.4",
            "href": "#3.2.4",
            "children": [],
            "level_number": "3.2.4"
          },
          {
            "title": "本专科RW≥2的病例占比",
            "id": "3.2.5",
            "href": "#3.2.5",
            "children": [],
            "level_number": "3.2.5"
          }
        ],
        "level_number": "3.2"
      },
      {
        "title": "住院患者医疗服务效率(近3年)",
        "id": "3.3",
        "href": "#3.3",
        "children": [
          {
            "title": "本专科费用消耗指数",
            "id": "3.3.1",
            "href": "#3.3.1",
            "children": [],
            "level_number": "3.3.1"
          },
          {
            "title": "本专科时间消耗指数",
            "id": "3.3.2",
            "href": "#3.3.2",
            "children": [],
            "level_number": "3.3.2"
          },
          {
            "title": "本专科术前住院天数",
            "id": "3.3.3",
            "href": "#3.3.3",
            "children": [],
            "level_number": "3.3.3"
          }
        ],
        "level_number": "3.3"
      },
      {
        "title": "住院患者医疗质量安全(近3年)",
        "id": "3.4",
        "href": "#3.4",
        "children": [
          {
            "title": "本专科中低风险组死亡率",
            "id": "3.4.1",
            "href": "#3.4.1",
            "children": [],
            "level_number": "3.4.1"
          },
          {
            "title": "本专科急危重病例救治能力",
            "id": "3.4.2",
            "href": "#3.4.2",
            "children": [],
            "level_number": "3.4.2"
          },
          {
            "title": "本专科非计划重返手术室再手术率",
            "id": "3.4.3",
            "href": "#3.4.3",
            "children": [],
            "level_number": "3.4.3"
          }
        ],
        "level_number": "3.4"
      },
      {
        "title": "技术突破与创新基础",
        "id": "3.5",
        "href": "#3.5",
        "children": [
          {
            "title": "本专科国家级科研项目数(近3年)",
            "id": "3.5.1",
            "href": "#3.5.1",
            "children": [],
            "level_number": "3.5.1"
          },
          {
            "title": "本专科有希望近期取得突破性进展的医疗技术研究项目(重点关注再生医学、生物医学新技术、人工智能、精准医疗等方面)",
            "id": "3.5.2",
            "href": "#3.5.2",
            "children": [],
            "level_number": "3.5.2"
          }
        ],
        "level_number": "3.5"
      }
    ],
    "level_number": "3"
  },
  {
    "title": "人才队伍建设情况",
    "id": "4",
    "href": "#4",
    "children": [
      {
        "title": "人才梯队建设",
        "id": "4.1",
        "href": "#4.1",
        "children": [
          {
            "title": "本专科人员基本结构情况",
            "id": "4.1.1",
            "href": "#4.1.1",
            "children": [],
            "level_number": "4.1.1"
          },
          {
            "title": "本专科梯队结构配置情况",
            "id": "4.1.2",
            "href": "#4.1.2",
            "children": [],
            "level_number": "4.1.2"
          },
          {
            "title": "亚专科学科带头人及骨干发展情况",
            "id": "4.1.3",
            "href": "#4.1.3",
            "children": [],
            "level_number": "4.1.3"
          }
        ],
        "level_number": "4.1"
      }
    ],
    "level_number": "4"
  },
  {
    "title": "专业影响力",
    "id": "5",
    "href": "#5",
    "children": [
      {
        "title": "医疗辐射能力(近3年)",
        "id": "5.1",
        "href": "#5.1",
        "children": [
          {
            "title": "本专科年出院患者中省外(国外)患者比例",
            "id": "5.1.1",
            "href": "#5.1.1",
            "children": [],
            "level_number": "5.1.1"
          },
          {
            "title": "本专科年接受下级医院急危重症和疑难病患者转诊数量",
            "id": "5.1.2",
            "href": "#5.1.2",
            "children": [],
            "level_number": "5.1.2"
          }
        ],
        "level_number": "5.1"
      },
      {
        "title": "声誉和影响力(近5年)",
        "id": "5.2",
        "href": "#5.2",
        "children": [
          {
            "title": "本专科带头人是否为国家、省级质控中心专家委员会成员等情况",
            "id": "5.2.1",
            "href": "#5.2.1",
            "children": [],
            "level_number": "5.2.1"
          }
        ],
        "level_number": "5.2"
      }
    ],
    "level_number": "5"
  }
]

8.4.3.2 循环生成组件

from dash import html
import feffery_antd_components as fac
def generate_element_components(elements_dict:dict, element_component_lst:list=[]):
    for element in elements_dict:
        # 处理当前层级的元素
        title = element['title']
        id = element['id']
        print(f"id: {id}, title: {title}")
        if len(id) == 1: # 1级标题
            element_components = [
                html.H2(f"{id} {title}", id = id)
            ]
        if len(id) == 3: # 2级标题
            element_components = [
                html.H3(f"{id} {title}", id = id)
            ]
        if len(id) == 5: # 3级标题
            element_components = [
                html.H4(f"{id} {title}", id = id),
                fac.AntdInput(
                    id = f'{id}text',
                    placeholder = f"这里填写{title}",
                    mode='text-area',
                    allowClear = True,
                    autoSize = {
                        'minRows': 10,
                        'maxRows' : 50,
                    },
                    style={
                        'width': '70%'
                    },
                ),
                fac.AntdUpload(
                    id = f'upload.file.{id}',
                    apiUrl='/upload/',
                    fileMaxSize=10,
                    multiple=True,
                    disabled=False,
                    fileTypes=['docx'],
                    buttonContent='上传文件(docx格式)'
                ),
                html.Br(),
            ]

        element_component_lst.extend(element_components)
        # 如果当前元素包含子元素,则递归调用 generate_elements 函数
        if element.get('children'):  # children不为空时再次遍历
                generate_element_components(element['children'], element_component_lst)

    return element_component_lst

generate_element_components(link_dict)
id: 1, title: 地方支持情况
id: 1.1, title: 地方支持情况
id: 1.1.1, title: 省级卫生行政部门规划、政策制定、长效机制建设及投入情况
id: 2, title: 医院管理情况
id: 2.1, title: 医院整体管理情况
id: 2.1.1, title: 组织管理体系
id: 2.1.2, title: 医院发展规划
id: 2.1.3, title: 预算管理制度
id: 2.1.4, title: 数据信息报告情况(HQMS、NCIS、医疗技术临床应用管理等信息系统)
id: 2.1.5, title: 单病种质量管理等质控工作情况
id: 2.2, title: 医院对专科支持情况
id: 2.2.1, title: 扶持政策或措施
id: 2.2.2, title: 软、硬件支持
id: 3, title: 专科建设与服务情况
id: 3.1, title: 专科建设
id: 3.1.1, title: 亚专科建设
id: 3.1.2, title: 本专科技术特色
id: 3.2, title: 住院患者医疗服务能力(近3年)
id: 3.2.1, title: 本专科DRGs组数
id: 3.2.2, title: 本专科病例组合指数(CMI)
id: 3.2.3, title: 本专科四级手术占比(外科为主)
id: 3.2.4, title: 本专科微创手术占比(外科为主)
id: 3.2.5, title: 本专科RW≥2的病例占比
id: 3.3, title: 住院患者医疗服务效率(近3年)
id: 3.3.1, title: 本专科费用消耗指数
id: 3.3.2, title: 本专科时间消耗指数
id: 3.3.3, title: 本专科术前住院天数
id: 3.4, title: 住院患者医疗质量安全(近3年)
id: 3.4.1, title: 本专科中低风险组死亡率
id: 3.4.2, title: 本专科急危重病例救治能力
id: 3.4.3, title: 本专科非计划重返手术室再手术率
id: 3.5, title: 技术突破与创新基础
id: 3.5.1, title: 本专科国家级科研项目数(近3年)
id: 3.5.2, title: 本专科有希望近期取得突破性进展的医疗技术研究项目(重点关注再生医学、生物医学新技术、人工智能、精准医疗等方面)
id: 4, title: 人才队伍建设情况
id: 4.1, title: 人才梯队建设
id: 4.1.1, title: 本专科人员基本结构情况
id: 4.1.2, title: 本专科梯队结构配置情况
id: 4.1.3, title: 亚专科学科带头人及骨干发展情况
id: 5, title: 专业影响力
id: 5.1, title: 医疗辐射能力(近3年)
id: 5.1.1, title: 本专科年出院患者中省外(国外)患者比例
id: 5.1.2, title: 本专科年接受下级医院急危重症和疑难病患者转诊数量
id: 5.2, title: 声誉和影响力(近5年)
id: 5.2.1, title: 本专科带头人是否为国家、省级质控中心专家委员会成员等情况
[H2(children='1 地方支持情况', id='1'),
 H3(children='1.1 地方支持情况', id='1.1'),
 H4(children='1.1.1 省级卫生行政部门规划、政策制定、长效机制建设及投入情况', id='1.1.1'),
 AntdInput(id='1.1.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写省级卫生行政部门规划、政策制定、长效机制建设及投入情况', style={'width': '70%'}),
 AntdUpload(id='upload.file.1.1.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H2(children='2 医院管理情况', id='2'),
 H3(children='2.1 医院整体管理情况', id='2.1'),
 H4(children='2.1.1 组织管理体系', id='2.1.1'),
 AntdInput(id='2.1.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写组织管理体系', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.1.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='2.1.2 医院发展规划', id='2.1.2'),
 AntdInput(id='2.1.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写医院发展规划', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.1.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='2.1.3 预算管理制度', id='2.1.3'),
 AntdInput(id='2.1.3text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写预算管理制度', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.1.3', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='2.1.4 数据信息报告情况(HQMS、NCIS、医疗技术临床应用管理等信息系统)', id='2.1.4'),
 AntdInput(id='2.1.4text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写数据信息报告情况(HQMS、NCIS、医疗技术临床应用管理等信息系统)', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.1.4', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='2.1.5 单病种质量管理等质控工作情况', id='2.1.5'),
 AntdInput(id='2.1.5text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写单病种质量管理等质控工作情况', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.1.5', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H3(children='2.2 医院对专科支持情况', id='2.2'),
 H4(children='2.2.1 扶持政策或措施', id='2.2.1'),
 AntdInput(id='2.2.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写扶持政策或措施', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.2.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='2.2.2 软、硬件支持', id='2.2.2'),
 AntdInput(id='2.2.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写软、硬件支持', style={'width': '70%'}),
 AntdUpload(id='upload.file.2.2.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H2(children='3 专科建设与服务情况', id='3'),
 H3(children='3.1 专科建设', id='3.1'),
 H4(children='3.1.1 亚专科建设', id='3.1.1'),
 AntdInput(id='3.1.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写亚专科建设', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.1.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.1.2 本专科技术特色', id='3.1.2'),
 AntdInput(id='3.1.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科技术特色', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.1.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H3(children='3.2 住院患者医疗服务能力(近3年)', id='3.2'),
 H4(children='3.2.1 本专科DRGs组数', id='3.2.1'),
 AntdInput(id='3.2.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科DRGs组数', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.2.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.2.2 本专科病例组合指数(CMI)', id='3.2.2'),
 AntdInput(id='3.2.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科病例组合指数(CMI)', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.2.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.2.3 本专科四级手术占比(外科为主)', id='3.2.3'),
 AntdInput(id='3.2.3text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科四级手术占比(外科为主)', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.2.3', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.2.4 本专科微创手术占比(外科为主)', id='3.2.4'),
 AntdInput(id='3.2.4text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科微创手术占比(外科为主)', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.2.4', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.2.5 本专科RW≥2的病例占比', id='3.2.5'),
 AntdInput(id='3.2.5text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科RW≥2的病例占比', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.2.5', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H3(children='3.3 住院患者医疗服务效率(近3年)', id='3.3'),
 H4(children='3.3.1 本专科费用消耗指数', id='3.3.1'),
 AntdInput(id='3.3.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科费用消耗指数', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.3.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.3.2 本专科时间消耗指数', id='3.3.2'),
 AntdInput(id='3.3.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科时间消耗指数', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.3.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.3.3 本专科术前住院天数', id='3.3.3'),
 AntdInput(id='3.3.3text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科术前住院天数', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.3.3', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H3(children='3.4 住院患者医疗质量安全(近3年)', id='3.4'),
 H4(children='3.4.1 本专科中低风险组死亡率', id='3.4.1'),
 AntdInput(id='3.4.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科中低风险组死亡率', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.4.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.4.2 本专科急危重病例救治能力', id='3.4.2'),
 AntdInput(id='3.4.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科急危重病例救治能力', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.4.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.4.3 本专科非计划重返手术室再手术率', id='3.4.3'),
 AntdInput(id='3.4.3text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科非计划重返手术室再手术率', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.4.3', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H3(children='3.5 技术突破与创新基础', id='3.5'),
 H4(children='3.5.1 本专科国家级科研项目数(近3年)', id='3.5.1'),
 AntdInput(id='3.5.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科国家级科研项目数(近3年)', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.5.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='3.5.2 本专科有希望近期取得突破性进展的医疗技术研究项目(重点关注再生医学、生物医学新技术、人工智能、精准医疗等方面)', id='3.5.2'),
 AntdInput(id='3.5.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科有希望近期取得突破性进展的医疗技术研究项目(重点关注再生医学、生物医学新技术、人工智能、精准医疗等方面)', style={'width': '70%'}),
 AntdUpload(id='upload.file.3.5.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H2(children='4 人才队伍建设情况', id='4'),
 H3(children='4.1 人才梯队建设', id='4.1'),
 H4(children='4.1.1 本专科人员基本结构情况', id='4.1.1'),
 AntdInput(id='4.1.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科人员基本结构情况', style={'width': '70%'}),
 AntdUpload(id='upload.file.4.1.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='4.1.2 本专科梯队结构配置情况', id='4.1.2'),
 AntdInput(id='4.1.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科梯队结构配置情况', style={'width': '70%'}),
 AntdUpload(id='upload.file.4.1.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='4.1.3 亚专科学科带头人及骨干发展情况', id='4.1.3'),
 AntdInput(id='4.1.3text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写亚专科学科带头人及骨干发展情况', style={'width': '70%'}),
 AntdUpload(id='upload.file.4.1.3', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H2(children='5 专业影响力', id='5'),
 H3(children='5.1 医疗辐射能力(近3年)', id='5.1'),
 H4(children='5.1.1 本专科年出院患者中省外(国外)患者比例', id='5.1.1'),
 AntdInput(id='5.1.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科年出院患者中省外(国外)患者比例', style={'width': '70%'}),
 AntdUpload(id='upload.file.5.1.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H4(children='5.1.2 本专科年接受下级医院急危重症和疑难病患者转诊数量', id='5.1.2'),
 AntdInput(id='5.1.2text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科年接受下级医院急危重症和疑难病患者转诊数量', style={'width': '70%'}),
 AntdUpload(id='upload.file.5.1.2', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None),
 H3(children='5.2 声誉和影响力(近5年)', id='5.2'),
 H4(children='5.2.1 本专科带头人是否为国家、省级质控中心专家委员会成员等情况', id='5.2.1'),
 AntdInput(id='5.2.1text', allowClear=True, autoSize={'minRows': 10, 'maxRows': 50}, mode='text-area', placeholder='这里填写本专科带头人是否为国家、省级质控中心专家委员会成员等情况', style={'width': '70%'}),
 AntdUpload(id='upload.file.5.2.1', apiUrl='/upload/', buttonContent='上传文件(docx格式)', disabled=False, fileMaxSize=10, fileTypes=['docx'], multiple=True),
 Br(None)]

8.4.4 生成思维导图字典

import json
import re
mindmap_str = '''
# 整数
## 整数的意义
### 整数的分类
### 自然数
## 数位顺序表
### 计数单位
### 数位和位数
### 整数的数位顺序表
### 数级
## 整数的读写、改写和近似数
### 整数的读写
### 整数的改写和近似数
## 整数的大小比较
### 位数相同
### 位数不相同
## 因数与倍数
### 因数和倍数的意义
### 找因数和倍数的方法
### 2、3、5的倍数的特征
### 偶数和奇数
### 质数、合数与分解质因数
#### 质数和合数的定义
#### 判断质数的方法
#### 分解质因数
## 公因数和公倍数
### 公因数和最大公因数的意义
### 互质数
### 求最大公因数和最小公倍数的方法
### 公倍数和最小公倍数的意义
'''

def generate_mindmap_data(markdown_content, match_pattern):
    links = []
    stack = [(-1, {'children': links})]
    level_counters = [0]

    for line in markdown_content.split('\n'):
        match = re.match(match_pattern, line)
        if match:
            level = len(match.group(1))
            name = match.group(2).strip()
            
            link = {'name': name, 'children': []}

            stack[level - 1][1]['children'].append(link)
            stack[level:] = [(level, link)]

    return links

match_pattern = r'^(#+)\s*(.*)'
mindmap_dict = generate_mindmap_data(mindmap_str, match_pattern)

print(
    (json
       .dumps(mindmap_dict, 
              indent=2, 
              ensure_ascii=False)
    )
        )
[
  {
    "name": "整数",
    "children": [
      {
        "name": "整数的意义",
        "children": [
          {
            "name": "整数的分类",
            "children": []
          },
          {
            "name": "自然数",
            "children": []
          }
        ]
      },
      {
        "name": "数位顺序表",
        "children": [
          {
            "name": "计数单位",
            "children": []
          },
          {
            "name": "数位和位数",
            "children": []
          },
          {
            "name": "整数的数位顺序表",
            "children": []
          },
          {
            "name": "数级",
            "children": []
          }
        ]
      },
      {
        "name": "整数的读写、改写和近似数",
        "children": [
          {
            "name": "整数的读写",
            "children": []
          },
          {
            "name": "整数的改写和近似数",
            "children": []
          }
        ]
      },
      {
        "name": "整数的大小比较",
        "children": [
          {
            "name": "位数相同",
            "children": []
          },
          {
            "name": "位数不相同",
            "children": []
          }
        ]
      },
      {
        "name": "因数与倍数",
        "children": [
          {
            "name": "因数和倍数的意义",
            "children": []
          },
          {
            "name": "找因数和倍数的方法",
            "children": []
          },
          {
            "name": "2、3、5的倍数的特征",
            "children": []
          },
          {
            "name": "偶数和奇数",
            "children": []
          },
          {
            "name": "质数、合数与分解质因数",
            "children": [
              {
                "name": "质数和合数的定义",
                "children": []
              },
              {
                "name": "判断质数的方法",
                "children": []
              },
              {
                "name": "分解质因数",
                "children": []
              }
            ]
          }
        ]
      },
      {
        "name": "公因数和公倍数",
        "children": [
          {
            "name": "公因数和最大公因数的意义",
            "children": []
          },
          {
            "name": "互质数",
            "children": []
          },
          {
            "name": "求最大公因数和最小公倍数的方法",
            "children": []
          },
          {
            "name": "公倍数和最小公倍数的意义",
            "children": []
          }
        ]
      }
    ]
  }
]