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

Python检查对象数组中hexdigest字段重复值并记录重复对象

检查自定义对象数组中hexdigest属性的重复对象

你的原代码逻辑存在错误:内层循环里的obj.hexdigest not in jbo是判断字符串是否存在于对象实例中,这永远返回True,导致所有对象都会被加入newlist,duplist始终为空,无法实现检查重复的需求。

以下是两种可行的解决方案:

方法一:按hexdigest分组提取重复对象

通过字典将对象按hexdigest分组,之后筛选出分组长度大于1的所有对象,能一次性获取所有重复的完整对象(包括每组中第一次出现的对象)。

class customclass: 
    def __init__(self, value, hexdigest): 
        self.value = value 
        self.hexdigest = hexdigest

# 初始化对象数组
hash_array = [
    customclass(value=299, hexdigest='927'),
    customclass(value=207, hexdigest='92b'),
    customclass(value=113, hexdigest='951'),
    customclass(value=187, hexdigest='951'),
    customclass(value=205, hexdigest='998')
]

# 按hexdigest分组存储对象
digest_groups = {}
for obj in hash_array:
    if obj.hexdigest not in digest_groups:
        digest_groups[obj.hexdigest] = []
    digest_groups[obj.hexdigest].append(obj)

# 收集所有重复的对象
duplicate_objects = []
for group in digest_groups.values():
    if len(group) > 1:
        duplicate_objects.extend(group)

# 打印结果
for obj in duplicate_objects:
    print(f"value: {obj.value}, hexdigest: {obj.hexdigest}")

运行后会输出两个hexdigest='951'的完整对象:

value: 113, hexdigest: 951
value: 187, hexdigest: 951

方法二:用集合跟踪已出现的hexdigest

通过集合记录已经见过的hexdigest,遍历数组时判断当前对象的hexdigest是否已存在,从而收集重复对象。如果需要包含第一次出现的重复对象,可调整逻辑用字典存储首次出现的对象。

class customclass: 
    def __init__(self, value, hexdigest): 
        self.value = value 
        self.hexdigest = hexdigest

hash_array = [
    customclass(value=299, hexdigest='927'),
    customclass(value=207, hexdigest='92b'),
    customclass(value=113, hexdigest='951'),
    customclass(value=187, hexdigest='951'),
    customclass(value=205, hexdigest='998')
]

# 仅收集后续重复出现的对象
seen_digests = set()
duplicate_objects = []
for obj in hash_array:
    if obj.hexdigest in seen_digests:
        duplicate_objects.append(obj)
    else:
        seen_digests.add(obj.hexdigest)

print("后续重复的对象:")
for obj in duplicate_objects:
    print(f"value: {obj.value}, hexdigest: {obj.hexdigest}")

# 若要包含第一次出现的重复对象,使用以下逻辑:
seen_digests = {}
full_duplicates = []
for obj in hash_array:
    if obj.hexdigest in seen_digests:
        # 首次出现的对象还没加入的话先加入
        if seen_digests[obj.hexdigest] not in full_duplicates:
            full_duplicates.append(seen_digests[obj.hexdigest])
        full_duplicates.append(obj)
    else:
        seen_digests[obj.hexdigest] = obj

print("\n所有重复的对象:")
for obj in full_duplicates:
    print(f"value: {obj.value}, hexdigest: {obj.hexdigest}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:26:05