如何从Python中的未排序列表中删除部分重复项?

问题描述:

我有一个大名单如何从Python中的未排序列表中删除部分重复项?

[[1,.., ..],[2,...,...],[5,...,...],[1,...,...]] 

我需要删除具有相同的第一个值的所有元素。 (只保留一次)

如何最有效地做到这一点?

保留一个set到目前为止看到的第一个值,并且只保留子列表,如果他们的第一个值不在集合中。

因为set.add总是返回Nonekeys.add(sublist[0]) or sublist相同None or sublist这是一样的sublist,因此它不会影响什么被保留在列表中,同时让您值添加到组列表解析里。

keys = set() 
biglist = [keys.add(sublist[0]) or sublist 
       for sublist in biglist 
        if sublist[0] not in keys] 
del keys # if you don't need it any more 
+0

哇,这是相当好的答案,它的工作原理。我花了几分钟才弄明白。感谢您的解释 – siamii 2012-03-22 05:49:34

如果列表的顺序没有关系,你可以试试这个:

dict([(sublist[0], sublist) for sublist in biglist]).values() 

dict([(sublist[0], sublist) for sublist in reversed(biglist)]).values() 

不同的是,第二个返回的第一个列表相同的第一个值,另一个相反。