检查python列表中是否有两个(或更多)具有相同属性值的自定义对象

检查python列表中是否有两个(或更多)具有相同属性值的自定义对象,python,arrays,list,Python,Arrays,List,我有一个“问题”: 我有一个包含如下自定义对象的Python列表List=[Object1,Object2,Object3,…,ObjectN],我想检查是否存在一些具有相同属性值的元素 因此,如果所有对象具有不同的属性值,则函数checkDuplicateAttr(list)应返回None,如果没有,则返回重复属性对象的列表 例如: Foo = newObject(value=1, name="foo") Bar = newObject(value=4, name=&quo

我有一个“问题”:

我有一个包含如下自定义对象的Python列表
List=[Object1,Object2,Object3,…,ObjectN]
,我想检查是否存在一些具有相同属性值的元素

因此,如果所有对象具有不同的属性值,则函数
checkDuplicateAttr(list)
应返回None,如果没有,则返回重复属性对象的列表

例如:

Foo = newObject(value=1, name="foo")
Bar = newObject(value=4, name="bar")
Car = newObject(value=1, name="car")
list = [Foo, Bar, Car]

if x = checkDuplicateAttr(list) is None:
    print("There are no duplicate attribute values")
else:
    print("There are duplicate value elements", x)
在我的例子中,输出应该是:

OUTPUT:
There are duplicate Value elements: [Foo, Car]

请检查以下代码是否对您有帮助:

from typing import List
from itertools import groupby


class MyCustomObj:
    def __init__(self, value, name):
        self.name = name
        self.value = value

    def __repr__(self):
        return self.name


def checkDuplicateAttr(objects: List[MyCustomObj]):
    obj_group_by_value = [
        list(g[1])
        for g in groupby(
            sorted(objects, key=lambda obj: obj.value), lambda obj: obj.value
        )
    ]
    return list(filter(lambda objs: len(objs) > 1, obj_group_by_value)) or None


Foo = MyCustomObj(value=1, name="foo")
Bar = MyCustomObj(value=4, name="bar")
Car = MyCustomObj(value=1, name="car")

x = checkDuplicateAttr([Foo, Bar, Car])
if x is None:
    print("There are no duplicate attribute values")
else:
    print(
        "There are duplicate value elements {}".format(
            x[0] if len(x) == 1 else x
        )
    )

到目前为止你尝试了什么?你被困在哪里?