基于键的python列表排序

2024-04-19 21:55:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些Python的入口列出。每个条目具有创建日期和创建时间。那个值以python格式存储日期时间.日期以及日期时间.time(作为两个单独的字段)。我需要对条目列表进行排序,以便之前创建的条目排在其他条目之前。在

我知道有一个列表.排序()接受密钥的函数函数。在在这种情况下,我是否必须使用日期和时间来创建日期时间并将其用作sort()的键?这里有一个datetime.datetime.combine(date,time)。但是如何在sort函数中指定它呢?在

我试过key = datetime.datetim.combine(created_date,created_time)

但是翻译抱怨说the name created_date is not defined

class Entry: 
   created_date = #datetime.date
   created_time  = #datetime.time
   ...

my_entries_list=[Entry1,Entry2...Entry10]
my_entries_list.sort(key = datetime.datetim.combine(created_date,created_time))

Tags: key函数列表datetimedatetime排序my
3条回答

documentation

key specifies a function of one argument that is used to extract a comparison key from each list element

例如

def combined_date_key(elem):
    return datetime.datetime.combine(v.created_date, v.created_time)

entries.sort(key=combined_date_key)

(这与已经发布的lambda相同,只是为了清楚起见而分开)。在

您的另一个选择是使用cmp参数(这里不是必需的,但是对于一个足够昂贵的可以短路的键函数,这可能会更快)

你可能想要这样的东西:

my_entries_list.sort(key=lambda v:
                           datetime.datetime.combine(v.created_date, v.created_time))

传递datetime.datetime.combine(created_date, created_time)将尝试立即调用combine,并中断,因为created_date和{}不能作为局部变量使用。lambda提供延迟求值:它不是立即执行代码,而是创建一个函数,该函数将在调用时执行指定的代码并返回结果。该函数还提供将用于访问created_datecreated_time属性的参数。在

使用lambda

sorted(my_entries_list,
       key=lambda e: datetime.combine(e.created_date, e.created_time))

相关问题 更多 >