Python:根据对象属性从列表中删除对象

标签 python django

我有一个 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 实例。

我希望我已经说清楚了。 非常感谢任何建议。

最佳答案

一种方法是创建一个 dictlabel 的值映射到 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

传入 maxlambda 表达式告诉 Python 在计算最大值时要比较哪个值。

关于Python:根据对象属性从列表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907862/

相关文章:

Python:按位置替换字符串中的字符

Django ManytoManyField 和小部件

sql - Django 模型 - 外键作为主键

python - Django ImportError 没有命名的模块

python - 使用 Pyrsvg 和 Cairo 在 Python 中渲染 SVG 时出现问题

python - 在不重启的情况下为django中的所有进程/线程重新加载.mo文件

python - 如何提高增量DeltaLake表的合并操作的性能?

python - django 中未显示点赞数

python - Django 属性错误

python - 读取二进制数据并将数据分布在网格文件Python中