Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中按日期对类实例列表进行排序_Python_List_Class_Sorting_Oop - Fatal编程技术网

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

在python中按日期对类实例列表进行排序,python,list,class,sorting,oop,Python,List,Class,Sorting,Oop,我有一个包含类实例的列表,我想按日期排序,但我很难弄清楚如何进行排序。它需要按升序排列。我正在使用的函数必须在列表中按时间顺序添加一个类的新实例 我尝试在列表中使用for循环,并在大于的实例之前插入新实例,但这只会导致最小实例的两倍。 我也尝试过使用.sort方法,但我不确定如何用它来实现 类的属性=名称、id、日期时间“某个日期”、内容 def add_new(self, new: class_name ) -> None: """Add new instance to cla

我有一个包含类实例的列表,我想按日期排序,但我很难弄清楚如何进行排序。它需要按升序排列。我正在使用的函数必须在列表中按时间顺序添加一个类的新实例

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

类的属性=名称、id、日期时间“某个日期”、内容

 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”的形式出现的

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

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
就目前而言,处理这一问题的方法是他们的关键论点。您可能希望执行以下操作:

def keyx: 返回x.date 或者如果您真的想使用lambdas:

lambda x:x.date 但请注意,这将只按日期排序。如果要按所有属性排序,则有两个选项

您可以让key函数返回要排序的属性元组,或者 您可以在类上定义比较方法。
可以找到比较方法的文档。它们允许您在类的实例之间进行实际比较,这意味着您根本不需要将任何内容传递给list.sort。

为什么是lambda??简单地使用list.sort不起作用?不,它不起作用!因为日期是listself中类对象的4个实例属性之一