为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2022-06-02 12:07:23
我有一个包含类实例的列表,我想按日期对其进行排序,但我无法弄清楚如何做到这一点。它需要按升序排列。我正在处理的函数必须添加一个类的新实例,但在列表中按时间顺序排列。我尝试在列表中使用 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') 形式
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以访问保存日期的类属性,然后进行排序。像这样的东西:


from datetime import datetime


class A:

    def __init__(self):

        self.date = datetime.now()


some_instances = []

for i in range(3):

    a = A()

    some_instances.append(a)


some_instances = sorted(some_instances, key=lambda x: x.date)


for instance in some_instances:

    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


查看完整回答
反对 回复 2022-06-02
?
ibeautiful

TA贡献1993条经验 获得超5个赞

list.sort()而言,处理这个问题的方法是他们的key论点。您可能想要执行以下操作:

def key(x):
    return x.date

或者,如果您真的想使用 lambda:

lambda x: x.date

但请注意,这只会按日期排序。如果要按所有属性排序,则有两种选择。

  1. 您可以让 key 函数返回要排序的属性元组,或者

  2. 您可以在类上定义比较方法。

可以在此处找到比较方法的文档。它们允许您在类的实例之间进行实际比较,这意味着您根本不需要向 list.sort() 传递任何内容。


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信