【问题标题】:sorting a list of class instances by date in python在python中按日期对类实例列表进行排序
【发布时间】:2020-01-21 00:32:35
【问题描述】:

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

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

1234562 的属性 = 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')

形式

【问题讨论】:

  • 为什么是 lambda??简单地使用 list.sort() 不起作用?
  • 不,不是!因为日期是列表中类对象的 4 个实例属性之一
  • self._class_list.sort(key=lambda x:x[1])

标签: python list class sorting oop


【解决方案1】:

list.sort() 而言,处理此问题的方法是使用他们的key 参数。您可能希望执行以下操作:

def key(x):
    return x.date

或者如果你真的想使用 lambdas:

lambda x: x.date

但请注意,这只会按日期排序。如果你想按所有属性排序,那么你有两个选择。

  1. 您可以让 key 函数返回一个属性元组以进行排序,或者
  2. 您可以在类中定义比较方法。

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-20
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2012-10-12
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多