从模型实例列表中删除重复项

3

基于这篇文章:Django比较模型实例的相等性

我正在尝试从我的实例列表中删除重复项(这些实例尚未保存,我假设它们的'id'为None)

代码如下:

a = list()
a.append(relation_list.pop())
for x in relation_list:
    duplicate = False
    for z in a:
        if z is x:
        #or if z.attrib1 == x.attrib1 and z.attrib2 == x.attrib2:
            duplicate = True
    if not duplicate:
        a.append(x)

然而,由于属性相等,因此永远不会执行行“duplicate = True”。

我错过了什么吗?

有没有更有效的方法来实现这一点?(灵感来自这篇帖子使用“in relation_list”也无效。)


你能解释一下relation_list最初是如何被填充的吗? - Daniel Roseman
当然。我有四个模型。假设它们是Action、Criteria、Danger和Relation。Relation存储与Action相关的危险程度,这取决于存储在Criteria中的条件。因此,我在Danger上注释了一个“Exist”字段,并循环遍历它以存储关系(the_relation.Action_id, the_relation.Danger_id, the_relation.Intensity)。@DanielRoseman - Azee
由于模型和计算的复杂性,“Exist”注释(以及其他注释)会返回相同的冗余关系。我只想保存唯一的值。 - Azee
@Azee 即使 zx 相等,z is x 可能为 False。请参考这个问题。你可以尝试使用 == 运算符代替 is 吗? - xyres
@xyres 我已经尝试过了,但没有任何改变。 - Azee
1个回答

2

请试一试并让我知道结果:

a = list()
for x in relation_list:
    if x.attrib1 not in [z.attrib1 for z in a]:
        a.append(x)

1
你让我开心极了!@ahmad - Azee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接