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

如何以Pythonic方式生成组内code的两两组合?

Pythonic方式实现分组内的两两组合生成

核心思路

先按group对原始数据归类,把同一组的code集中到一个列表里,再对每个组内的code用itertools.combinations生成所有不重复的两两组合,最后将组名与组合结果拼接,就能完全避免跨组匹配。

代码实现

方式一:普通字典分组(无额外依赖)

from itertools import combinations

# 原始数据(元组列表形式,也可以换成列表字典)
original_data = [
    ("A", 1), ("A", 2), ("A", 3),
    ("B", 4), ("B", 5), ("B", 6), ("B", 7)
]

# 按group分组收集code
grouped_codes = {}
for group, code in original_data:
    if group not in grouped_codes:
        grouped_codes[group] = []
    grouped_codes[group].append(code)

# 生成组内两两组合
result = []
for group, codes in grouped_codes.items():
    # 生成所有2元素的不重复组合
    for code1, code2 in combinations(codes, 2):
        result.append((group, code1, code2))

方式二:用collections.defaultdict简化(更简洁)

from itertools import combinations
from collections import defaultdict

original_data = [
    ("A", 1), ("A", 2), ("A", 3),
    ("B", 4), ("B", 5), ("B", 6), ("B", 7)
]

# 自动完成分组
grouped = defaultdict(list)
for g, c in original_data:
    grouped[g].append(c)

# 列表推导式一行生成结果
result = [(g, c1, c2) for g, codes in grouped.items() for c1, c2 in combinations(codes, 2)]

最终结果

将result转换成表格形式如下:

groupcodecode
A12
A13
A23
B45
B46
B47
B56
B57
B67

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:05:37