2

可能重复:
字典列表,消除一个键的重复项,按另一个键排序

有谁知道如何从我的字典对象列表中删除重复项,其中两个键应该与 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)

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

4

1 回答 1

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().

于 2012-09-18T12:37:33.647 回答