Python-在对象列表上使用set <class'xyz.models.abc'=“”> </class>

时间:2014-05-01 10:25:02

标签: python django algorithm python-2.7 set

设置https://docs.python.org/2/library/sets.html#sets.Set

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

class mymodel():
     field1 = 
     field2 = 

我得到的对象在field2的基础上有所不同。 但我想在field1的基础上收缩。 field1对于少数对象是常见的 例如,当前列表有10000个对象。如果我通过field1缩小它,它将包含大约3000个唯一对象。

我不认为set为此提供了便利?任何其他功能或方法?

3 个答案:

答案 0 :(得分:1)

django的“列表”是对象的查询集吗?如果是这样的话,那么更快,更少内存的方法就是运行distinct查询

objects.order_by('field1').distinct('field1')
  • 请注意,这仅适用于PostgreSQL

答案 1 :(得分:0)

result = []
seen = set()
for obj in objects:
    if obj.field1 not in seen:
        seen.add(obj.field1)
        result.append(obj)

答案 2 :(得分:0)

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

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