首先在列表中找到重复的项目

时间:2016-01-03 12:46:50

标签: python list python-2.7

我有一个如下所示的列表:

[(1, 0.3), (3, 0.2), (3, 0.15), (1, 0.07), (1, 0.02), (2, 0.01)]

我想根据每个元组中的第一项保留此列表中首次找到的重复项:

[(1, 0.3), (3, 0.2), (2, 0.01)]

有一种有效的方法吗?

2 个答案:

答案 0 :(得分:7)

如果结果列表的顺序无关紧要,只要它包含每个元组的原始列表中的第一个条目:首先反转列表,然后将其传递给dict以删除重复项并保留每个键的最后条目(原始列表中的第一个,因为它已被反转):

>>> items = [(1, 0.3), (3, 0.2), (3, 0.15), (1, 0.07), (1, 0.02), (2, 0.01)]
>>> list(dict(reversed(items)).items())
[(1, 0.3), (2, 0.01), (3, 0.2)]

如果结果列表的顺序很重要,请参阅Padraic的答案:)

答案 1 :(得分:4)

如果您使用生成器功能,您可以懒洋洋地返回第一个欺骗,您需要存储的是一旦该功能结束将成为gc&#d; dd的键:

def first_found(l):
    seen = set()
    for k, v in l:
        if k not in seen:
            yield (k, v)
        seen.add(k)

您的列表会给您:

print(list(first_found(l)))
[(1, 0.3), (3, 0.2), (2, 0.01)]

或者更新原始列表:

l[:] = first_found(l)

或者创建一个词典:

od = OrderedDict(first_found(l))

print(od)
OrderedDict([(1, 0.3), (3, 0.2), (2, 0.01)])
相关问题