使用set的Python唯一列表

use*_*238 3 python list set

可能重复:
如何在保留顺序的同时从Python中的列表中删除重复项?

我要做的是编写一个方法,将列表作为参数,并使用一个集合返回列表的副本,其中每个元素只出现一次,并且新列表中的元素按照它们的顺序出现首次出现在原始列表中.我必须为此使用一个集合,但是,我不能这样做,以便输出顺序正确,同时具有快速结果.如果我把这样的东西:

def unique(a):

return list(set(a))
Run Code Online (Sandbox Code Playgroud)

并传递了包含数百万个元素的列表,它会快速给我一个结果,但它不会被订购.所以我现在所拥有的是:

def unique(a):
b = set(a)
c = {}
d = []
for i in b:
    c[a.index(i)] = i
for i in c:
    d.append(c[i])
return d
Run Code Online (Sandbox Code Playgroud)

这给了我想要的结果,但速度不够快.如果我通过一个包含一百万个元素的列表,我可能会等待半个小时,而那个上面的那个只需不到一秒钟.我怎么能解决这个问题?

jam*_*lak 8

>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]
Run Code Online (Sandbox Code Playgroud)