You need to enable JavaScript to run this app. 如何根据CSV中的等价数据配对确定对应分组?
优惠活动
大模型
产品
解决方案
定价
更多

如何根据CSV中的等价数据配对确定对应分组?

基于配对规则生成分组的最优实现方案

这个问题的本质是求解无向图的连通分量,最简洁、高效的实现方式是使用*并查集(Disjoint Set Union, DSU)*数据结构,完全匹配你需要的关联推导逻辑,没有冗余复杂度。

核心实现逻辑

  1. 初始化结构:把CSV中所有出现过的元素,先默认作为独立的单独分组
  2. 合并分组:逐行读取每对关联元素,把两个元素所在的组合并为同一个组,哪怕两个元素是通过多对关系间接关联(比如A-B、B-D,会自动把A/B/D归为同一组)
  3. 归集结果:所有配对处理完成后,把属于同一个组的元素归集到一起,给每个组按稳定顺序编号为Group 1、Group 2……
  4. 格式化输出:把所有元素按字典序排序,输出成你需要的元素, 组编号格式

可直接运行的极简实现代码

from collections import defaultdict

# 并查集核心结构,仅保留必要功能
class DSU:
    def __init__(self):
        self.parent = {}
    
    def find(self, x):
        # 路径压缩优化,快速找到元素所属的组根节点
        if self.parent.setdefault(x, x) != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]
    
    def union(self, x, y):
        # 合并两个元素所属的分组
        root_x = self.find(x)
        root_y = self.find(y)
        if root_x != root_y:
            self.parent[root_y] = root_x

# 替换成你实际读取CSV的逻辑即可,这里用示例输入做测试
pair_list = [("A", "B"), ("B", "D"), ("E", "G"), ("F", "G"), ("H", "C")]
dsu = DSU()
for a, b in pair_list:
    dsu.union(a.strip(), b.strip())

# 按组根节点归集所有元素
groups = defaultdict(list)
for node in dsu.parent.keys():
    root = dsu.find(node)
    groups[root].append(node)

# 生成稳定的组编号,按组内最小元素排序,避免每次运行结果随机
group_id = 1
node_group_map = {}
for _, members in sorted(groups.items(), key=lambda item: min(item[1])):
    for node in members:
        node_group_map[node] = f"Group {group_id}"
    group_id += 1

# 按元素字典序输出目标格式
for node in sorted(node_group_map.keys()):
    print(f"{node}, {node_group_map[node]}")

运行输出效果

上述代码跑完后,输出结果和你示例的期望格式完全一致:

A, Group 1
B, Group 1
C, Group 2
D, Group 1
E, Group 3
F, Group 3
G, Group 3
H, Group 2

方案优势

  • 完全匹配业务规则:自动识别直接、间接的配对关联,不需要手动遍历找隐式关系,不会漏判跨层连接
  • 性能开销极低:路径压缩优化后的并查集时间复杂度接近线性,哪怕CSV包含十万级别的配对记录,也能毫秒级跑完
  • 结果稳定可控:通过排序逻辑固定组编号和输出顺序,不会每次运行出现随机的分组排序差异
  • 代码量极少:没有复杂的嵌套循环、递归逻辑,维护成本极低

内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 18:36:04