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

如何基于两两比较的重复判断函数对Python对象列表进行分组

解法1:通用双参数比较函数分组(适配任意is_duplicate逻辑)

思路是逐个遍历机构,维护已完成的分组列表,对每个新机构,检查是否和已有分组中的任意元素满足is_duplicate条件,是则加入对应分组,否则新建分组。

def group_by_duplicate_func(org_list, duplicate_checker):
    groups = []
    for org in org_list:
        matched = False
        for group in groups:
            # 只要和分组内任意一个元素判定为重复,就加入该分组
            if duplicate_checker(org, group[0]):
                group.append(org)
                matched = True
                break
        if not matched:
            groups.append([org])
    # 转换为你要求的元组格式
    return [tuple(g) for g in groups]

# 调用测试
grouped_by_duplicates = group_by_duplicate_func(orgs, is_duplicate)

这个方法完全兼容任意双入参的重复判定逻辑,不用修改判定函数本身。


解法2:利用同源无重复特性优化

因为你提到同一fetched_from下没有重复数据,若你的is_duplicate本质是判断某些字段相等,还可以进一步提取分组键,用字典实现O(n)时间复杂度的分组:

from collections import defaultdict

def group_by_key(org_list):
    group_dict = defaultdict(list)
    for org in org_list:
        # 这里的键对应你is_duplicate的判定逻辑,判定逻辑修改只需调整键的生成规则
        group_key = org.name
        group_dict[group_key].append(org)
    return [tuple(v) for v in group_dict.values()]

grouped_by_duplicates = group_by_key(orgs)

合并重复数据演示

拿到分组后直接用你提供的merge函数配合reduce使用即可:

from functools import reduce

merged_orgs = [reduce(merge, group) for group in grouped_by_duplicates]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:15:02