Python 从列表中删除重复项,保留最新

Python 从列表中删除重复项,保留最新,python,algorithm,unique,Python,Algorithm,Unique,可能重复: 有人知道如何从我的dictionary对象列表中删除重复项吗?其中两个键应该比较为equals,第三个键是时间戳?要留在列表中的对象应该是具有最新时间戳的对象 为了消除问题中的任何歧义,我为我的目标提供了一个简单的测试用例: from datetime import datetime now = datetime.now() future = datetime(now.year + 100, *now.timetuple()[1:-2]) # Elements are consi

可能重复:

有人知道如何从我的dictionary对象列表中删除重复项吗?其中两个键应该比较为equals,第三个键是时间戳?要留在列表中的对象应该是具有最新时间戳的对象

为了消除问题中的任何歧义,我为我的目标提供了一个简单的测试用例:

from datetime import datetime
now = datetime.now()
future = datetime(now.year + 100, *now.timetuple()[1:-2])

# Elements are considered equal if A and B matches.
data = [{"A":10,"B":20,"D":now}, \
        {"A":45,"B":20,"D":now}, \
        {"A":45,"B":20,"D":future}, \
        {"A":66,"B":6,"D":future}, \
        {"A":66,"B":6,"D":now}]

def make_unique(lst):
    pass

make_unique(data)

# data should now contain: (10,20,now),(45,20,future),(66,6,future)
print(data)

性能并不十分重要,但列表很可能包含数千个元素。

您可以尝试创建一个dictionary
unique
并对
数据进行迭代。将元组
(d['A'],d['B'])
设置为键,并将相应的项
d
设置为值。然后,检查(1)键是否已在字典中,以及(2)相应的时间戳是否比存储的时间戳更近:

unique = {}
for d in data:
    key = (d['A'],d['B'])
    if key in unique:
        if unique[key]['D'] < d['D']:
            unique[key] = d
    else:
        unique[key] = d
unique={}
对于数据中的d:
键=(d['A'],d['B'])
如果输入唯一:
如果唯一[key]['D']

然后,只需检索一个未排序的列表作为
unique.values()

@FallenAngel:Nice find,这确实是一样的。谢谢,我采用了这种方法。