从Django列表中删除重复项

从Django列表中删除重复项

问题描述:

对不起,如果这是一个基本问题,但我似乎无法解决这个问题! :/从Django列表中删除重复项

我的应用程序填充文件夹中的文件列表。然后查询一个数据库并创建一个文件名的查询集。

我想列表被合并,然后重复删除。然而在

def Image_Add(request): 
    path="..." 
    images =os.listdir(path) 
    usedimage=Images.objects.values('imageurl').distinct() 
    result=[] 

    for image in images: 
     result.append(image) 

    for image2 in usedimage: 
     result.append(image2) 

    imagelis=set(result) 
    imagelist=list(imagelis) 

    return TemplateResponse(request, 'Image_Add.html', {'form':imagelist}) 

:最后的名单将在随后的模板罗列出来,将这个包含在该文件夹中,但还没有被添加到数据库文件,

Views.py模板中的所有文件都将显示,而不会删除重复项。 (我目前就行了 “imagelis=set(result)” 得到一个错误)

感谢您

+0

你为什么要转换成一个集合,然后回到列表?另外,你得到的错误是什么? – 2013-02-26 11:59:50

使用

usedimage=Images.objects.values_list('imageurl', flat=True).distinct() 

,而不是

usedimage=Images.objects.values('imageurl').distinct() 

docs

values()返回不可分类的字典。这会导致错误。

+0

啊......那是完美的。谢谢 – user1662290 2013-02-26 12:02:47

usedimage=Images.objects.values_list('imageurl', flat=True).distinct() 

for image in usedimage: 
    Images.objects.filter(pk__in=Images.objects.filter(imageurl=imageurl 
     ).values_list('id', flat=True)[1:]).delete() 

正如凯瑟琳说,你可以在django quesy本身过滤。

或者删除重复项,请尝试设置 以下是一个示例。

import sets 
t = sets.Set(['a', 'b', 'c', 'd']) 
t1 = sets.Set(['a', 'b', 'c']) 

print t | t1 
print t - t1