忽略年份排序日期时间对象?

8 投票
3 回答
4043 浏览
提问于 2025-04-15 17:52

我有一个生日的列表,这些生日是用 datetime 对象存储的。请问我该如何在Python中仅使用 monthday 这两个参数来对它们进行排序呢?

比如说,

[
    datetime.datetime(1983, 1, 1, 0, 0)
    datetime.datetime(1996, 1, 13, 0 ,0)
    datetime.datetime(1976, 2, 6, 0, 0)
    ...
]

谢谢! :)

3 个回答

3

如果日期是以字符串的形式存储的——你说它们不是,虽然看起来像是——你可以使用dateutil库里的解析器:

>>> from dateutil.parser import parse
>>> from pprint import pprint
>>> bd = ['February 6, 1976','January 13, 1996','January 1, 1983']
>>> bd = [parse(i) for i in bd]
>>> pprint(bd)
[datetime.datetime(1976, 2, 6, 0, 0), 
 datetime.datetime(1996, 1, 13, 0, 0), 
 datetime.datetime(1983, 1, 1, 0, 0)]
>>> bd.sort(key = lambda d: (d.month, d.day)) # from sth's answer
>>> pprint(bd)
[datetime.datetime(1983, 1, 1, 0, 0),
 datetime.datetime(1996, 1, 13, 0, 0),
 datetime.datetime(1976, 2, 6, 0, 0)]

如果你的日期格式不一样,你可以试试模糊解析:

>>> bd = [parse(i,fuzzy=True) for i in bd] # replace line 4 above with this line
7

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。

例如,假设你有一个程序,它需要检查用户输入的密码是否正确。如果密码正确,程序就会让用户进入系统;如果不正确,程序就会提示用户重新输入。这种根据条件来决定程序走向的方式,叫做“条件语句”。

条件语句就像是一个分岔路口,程序在这里会根据你给出的条件选择不同的路径。常见的条件语句有“如果……那么……”这样的结构。

总之,条件语句帮助程序根据不同的情况做出不同的反应,让程序更加智能和灵活。

l.sort(key = lambda x: x.timetuple()[1:3])
13

你可以使用 month(月份)和 day(日期)来创建一个可以用来排序的值:

birthdays.sort(key = lambda d: (d.month, d.day))

撰写回答