我正在处理一个Python项目,其中有一个自定义对象列表,我需要根据这些对象的多个属性过滤掉重复的对象。每个对象都有三个属性:id
、name
和timestamp
。如果id
和name
属性都匹配列表中的另一个对象,我想将该对象视为重复对象。确定重复项时不应考虑timestamp
属性。
下面是一个自定义对象类的示例:
class CustomObject:
def __init__(self, id, name, timestamp):
self.id = id
self.name = name
self.timestamp = timestamp
和对象的示例列表:
data = [
CustomObject(1, "Alice", "2023-01-01"),
CustomObject(2, "Bob", "2023-01-02"),
CustomObject(1, "Alice", "2023-01-03"),
CustomObject(3, "Eve", "2023-01-04"),
CustomObject(2, "Bob", "2023-01-05"),
]
在本例中,我希望删除重复项,并保留最早的timestamp
对象。
预期输出应为:
[
CustomObject(1, "Alice", "2023-01-01"),
CustomObject(2, "Bob", "2023-01-02"),
CustomObject(3, "Eve", "2023-01-04"),
]
我知道我可以使用一个循环来比较列表中的每个对象和其他对象,但我担心性能,特别是当列表变大时。在Python中是否有更有效的方法来实现这一点,可能使用内置函数或库?
4条答案
按热度按时间q43xntqr1#
h9vpoimq2#
您可以使用字典来跟踪基于
id
和name
属性的唯一对象,并在发现具有早期timestamp
的对象时更新timestamp
。这里有一个解决方案,应该比使用嵌套循环更有效:ibps3vxo3#
对类做一些修改,使其在
set
中可用:现在你可以从列表中创建一个
set
:如果数据尚未按日期排序,则需要先按日期排序。
g52tjvyc4#
如果在类中实现__gt__,可以使代码更简洁。对象之间的比较基于时间戳值,该时间戳值被假定为YYYY-MM-DD格式。这将不适用于其他日期时间格式,因为它只是一个词汇比较:
输出: