Python—在对象列表上使用set<;类别';xyz.models.abc'&燃气轮机;

Python—在对象列表上使用set<;类别';xyz.models.abc'&燃气轮机;,python,django,algorithm,python-2.7,set,Python,Django,Algorithm,Python 2.7,Set,设置 我有一个10000个类对象的列表(django模型)。虽然它们都是唯一的,但我想根据class属性缩小这个列表 class mymodel(): field1 = field2 = 我得到的对象在field2的基础上是不同的。 但我想在field1的基础上缩小。字段1对于少数对象是通用的 例如,当前列表有10000个对象。如果按field1缩小它,它将包含大约3000个独特的对象 我不认为set提供了这样的设施?还有其他功能或方法吗?django对象的“列表”是查

设置

我有一个10000个类对象的列表(django模型)。虽然它们都是唯一的,但我想根据class属性缩小这个列表

class mymodel():
     field1 = 
     field2 = 
我得到的对象在field2的基础上是不同的。 但我想在field1的基础上缩小。字段1对于少数对象是通用的 例如,当前列表有10000个对象。如果按field1缩小它,它将包含大约3000个独特的对象

我不认为set提供了这样的设施?还有其他功能或方法吗?

django对象的“列表”是查询集吗?如果是这样,一种更快、内存占用更少的方法就是运行查询

result = []
seen = set()
for obj in objects:
    if obj.field1 not in seen:
        seen.add(obj.field1)
        result.append(obj)
  • 请注意,这仅适用于PostgreSQL

我采用了不同的方法,使用字典理解

unique_objs = {obj.field1:obj for obj in objects}.values()
unique_objs = {obj.field1:obj for obj in objects}.values()