在python中按日期对类实例列表进行排序
我有一个包含类实例的列表,我想按日期排序,但我很难弄清楚如何进行排序。它需要按升序排列。我正在使用的函数必须在列表中按时间顺序添加一个类的新实例 我尝试在列表中使用for循环,并在大于的实例之前插入新实例,但这只会导致最小实例的两倍。 我也尝试过使用.sort方法,但我不确定如何用它来实现 类的属性=名称、id、日期时间“某个日期”、内容在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
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个实例属性之一