猿问

在python中按日期对类实例列表进行排序

我有一个包含类实例的列表,我想按日期对其进行排序,但我无法弄清楚如何做到这一点。它需要按升序排列。我正在处理的函数必须添加一个类的新实例,但在列表中按时间顺序排列。


我尝试在列表中使用 for 循环并将新实例插入到它大于但只会导致我的最小实例翻倍的实例之前。我也尝试使用 .sort 方法,我不确定如何使用它来实现。


类的属性 = name, id, datetime('some date'),content


 def add_new(self, new: class_name ) -> None:

    """Add new instance to class_list the  for this class, if new_instance was posted at a

    later date. Otherwise, do not add to class_list.


    new_instances must be added in chronological order.

    """


    if reply.date >= self.date:

        self._class_list.append(reply)

    self._class_list.sort(key = lambda x: )

我不确定要为 x 添加什么?因为类实例中的所有日期都采用 datetime('random date') 形式


jeck猫
浏览 175回答 2
2回答

幕布斯7119047

您可以访问保存日期的类属性,然后进行排序。像这样的东西:from datetime import datetimeclass A:&nbsp; &nbsp; def __init__(self):&nbsp; &nbsp; &nbsp; &nbsp; self.date = datetime.now()some_instances = []for i in range(3):&nbsp; &nbsp; a = A()&nbsp; &nbsp; some_instances.append(a)some_instances = sorted(some_instances, key=lambda x: x.date)for instance in some_instances:&nbsp; &nbsp; print(instance, instance.date)哪个打印:# <__main__.A object at 0x7fda760e62b0> 2019-09-19 19:02:06.887805# <__main__.A object at 0x7fda76031be0> 2019-09-19 19:02:06.887810# <__main__.A object at 0x7fda7603f908> 2019-09-19 19:02:06.887811

ibeautiful

就list.sort()而言,处理这个问题的方法是他们的key论点。您可能想要执行以下操作:def&nbsp;key(x): &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x.date或者,如果您真的想使用 lambda:lambda&nbsp;x:&nbsp;x.date但请注意,这只会按日期排序。如果要按所有属性排序,则有两种选择。您可以让 key 函数返回要排序的属性元组,或者您可以在类上定义比较方法。可以在此处找到比较方法的文档。它们允许您在类的实例之间进行实际比较,这意味着您根本不需要向 list.sort() 传递任何内容。
随时随地看视频慕课网APP

相关分类

Python
我要回答