如何用Python为列名列表统计唯一值并构建C-TR-AR层级树形结构
完整实现方案:统计列名唯一值并构建C→TR→AR层级树形结构
1. 核心需求拆解
针对拆分后的列名子列表(包含HoPE、FA、exp、TX、C系列、TR系列、AR系列字段),需完成:
- 统计每个索引位置的唯一字段值
- 构建严格层级的树形结构:C类节点作为TR类节点的父节点,每个TR类节点作为AR类节点的父节点(满足每个C对应3个TR、每个TR对应5个AR的规则)
2. 假设预处理后的数据格式
基于你提到的预处理逻辑,假设已完成列名拆分,示例数据如下:
# 拆分后的列名子列表示例 split_cols = [ ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_1", "AR_1"], ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_1", "AR_2"], ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_1", "AR_3"], ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_1", "AR_4"], ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_1", "AR_5"], ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_2", "AR_1"], ["HoPE_1", "FA_2", "exp_3", "TX_4", "C_1", "TR_2", "AR_2"], # ... 省略其余符合规则的子列表 ]
3. 完整代码实现
步骤1:统计各索引位置的唯一值
# 统计每个索引的唯一字段值 index_unique = {} for col_group in split_cols: for idx, col in enumerate(col_group): if idx not in index_unique: index_unique[idx] = set() index_unique[idx].add(col) # 转换为排序后的列表(可选,方便查看) for idx in index_unique: index_unique[idx] = sorted(list(index_unique[idx])) # 输出统计结果 print("各索引唯一值统计:") for idx, vals in index_unique.items(): print(f"索引{idx}: {vals}")
步骤2:构建C→TR→AR树形结构
# 初始化树形结构容器 tree = {} # 遍历所有列组,按层级填充节点 for col_group in split_cols: # 提取C、TR、AR字段(根据实际索引调整,示例中对应索引4、5、6) c_node = col_group[4] tr_node = col_group[5] ar_node = col_group[6] # 初始化C节点 if c_node not in tree: tree[c_node] = {} # 初始化TR节点(每个C下最多3个) if tr_node not in tree[c_node]: tree[c_node][tr_node] = [] # 添加AR节点(每个TR下最多5个,自动去重) if ar_node not in tree[c_node][tr_node]: tree[c_node][tr_node].append(ar_node) # 对每个TR下的AR节点排序(可选) for c in tree: for tr in tree[c]: tree[c][tr] = sorted(tree[c][tr]) # 格式化输出树形结构 print("\n生成的树形结构:") import json print(json.dumps(tree, indent=2))
步骤3:验证结构规则(可选)
用于确保生成的树形结构符合「每个C对应3个TR、每个TR对应5个AR」的要求:
# 校验树形结构规则 is_valid = True for c, tr_nodes in tree.items(): if len(tr_nodes) != 3: print(f"⚠️ 警告:C节点{c}的TR节点数量为{len(tr_nodes)},不符合3个的要求") is_valid = False for tr, ar_nodes in tr_nodes.items(): if len(ar_nodes) != 5: print(f"⚠️ 警告:TR节点{tr}的AR节点数量为{len(ar_nodes)},不符合5个的要求") is_valid = False if is_valid: print("\n✅ 树形结构完全符合预设规则")
4. 代码说明
- 索引统计:利用集合自动去重特性,高效收集每个索引的唯一值,最后转换为有序列表提升可读性
- 树形构建:采用「字典嵌套字典+列表」的结构,C为顶层键,TR为二级键,AR为对应列表元素,确保层级关系清晰
- 规则校验:可选步骤,用于快速排查数据是否符合业务规则,避免生成不符合要求的结构
内容的提问来源于stack exchange,提问作者yade acem
相关产品推荐
相关产品推荐

