检查python列表中是否有两个(或更多)具有相同属性值的自定义对象
我有一个“问题”: 我有一个包含如下自定义对象的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
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
)
)
到目前为止你尝试了什么?你被困在哪里?