可能重复:
List of dictionaries, eliminating duplicates of one key, sorting by another
有没有人有任何聪明的想法如何从我的字典对象列表中删除重复项,其中两个键应该与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)
性能并不重要,但列表很可能包含几个元素。
答案 0 :(得分:1)
您可以尝试创建字典unique
并在data
上进行迭代。将元组(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.values()
。