我在python列表中有一些Entrys。每个Entry都有一个创建日期和创建时间。这些值存储为python datetime.date和datetime.time(作为两个单独的字段)。我需要获取Entrys列表已排序的sothat先前创建的Entry在其他人之前。
我知道有一个list.sort()函数接受一个关键函数。在这种情况下,我是否必须使用日期和时间来创建日期时间并将其用作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))
答案 0 :(得分:7)
您可能需要以下内容:
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
和created_time
不可用作本地变量而中断。 lambda
提供延迟评估:它不是立即执行代码,而是创建函数,在调用时,将执行指定的代码并返回结果。该函数还提供了用于访问created_date
和created_time
属性的参数。
答案 1 :(得分:2)
使用lambda
:
sorted(my_entries_list,
key=lambda e: datetime.combine(e.created_date, e.created_time))
答案 2 :(得分:1)
key指定一个参数的函数,该函数用于从每个列表元素中提取比较键
例如
def combined_date_key(elem):
return datetime.datetime.combine(v.created_date, v.created_time)
entries.sort(key=combined_date_key)
(这与已经发布的lambda相同,为了清楚起见,已经分解了。)
您的另一个选择是使用cmp
参数(这里不需要它,但是对于可以短路的足够昂贵的键功能,这可能会更快)
答案 3 :(得分:0)
使用这样的元组可能会稍快一点:
sorted(my_entries_list,
key = lambda e: (e.created_date, e.created_time))
然后事情将按日期排序,并且只有日期匹配才会考虑时间。