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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:27