忽略年份排序日期时间对象?
我有一个生日的列表,这些生日是用 datetime
对象存储的。请问我该如何在Python中仅使用 month
和 day
这两个参数来对它们进行排序呢?
比如说,
[
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))