我有一个 python 对象列表,我想根据时间值删除列表中的重复项。 例如:
class MyClass(object):
identifier = models.CharField(max_length=128)
label = models.CharField(max_length=128)
stat_time = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return str(self.label)
我的列表可能有多个具有相同标签但不同 stat_time 的 MyClass 实例。 我想修剪列表并只保留一个具有最新 stat_time 的标签实例。
>>> my_list
[MyClass: xxx, MyClass: yyy, MyClass: yyy, MyClass: zzz]
我想最终得到:
>>> my_list
[MyClass: xxx, MyClass: yyy, MyClass: zzz]
这里 my_list 应该只包含一个带有“yyy”标签且最新 stat_time 的 MyClass 实例。
我希望我已经说清楚了。 非常感谢任何建议。
最佳答案
一种方法是创建一个 dict
将 label
的值映射到 MyClass
实例。您可以将列表中的每个元素添加到此 dict
中,但仅保留所需的值。
aDict = dict()
for element in myList:
s = element.label
if s not in aDict: # the key is not used yet
aDict[s] = element
else:
aDict[s] = max(aDict[s], element, key = lambda x: x.stat_time)
myList = list(aDict.items()) # iteritems() in Python 2
传入 max
的 lambda
表达式告诉 Python 在计算最大值时要比较哪个值。
关于Python:根据对象属性从列表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907862/