20

我有一个对象列表,每个对象都有一个特定的属性。该属性不是唯一的,我想最终得到一个对象列表,该列表是整个列表的子集,这样所有特定属性都是唯一的集合。

例如,如果我有四个对象:

object1.thing = 1
object2.thing = 2
object3.thing = 3
object4.thing = 2

我想结束

[object1, object2, object3]

或者

[object1, object3, object4]

最终列表中的确切对象并不重要,只是其特定属性的列表是唯一的。

编辑:澄清一下,基本上我想要的是一个与该特定属性无关的集合。

4

2 回答 2

25

您可以使用一个list comprehensionset

objects = (object1,object2,object3,object4)
seen = set()
unique = [obj for obj in objects if obj.thing not in seen and not seen.add(obj.thing)]

上面的代码等价于:

seen = set()
unique = []
for obj in objects:
    if obj.thing not in seen:
        unique.append(obj)
        seen.add(obj.thing)
于 2013-06-27T15:52:24.130 回答
15

您可以创建一个字典,其键是对象的东西,值是对象本身。

d = {}
for obj in object_list:
    d[obj.thing] = obj
desired_list = d.values()
于 2013-06-27T15:52:14.873 回答