Python3字典按日期键排序的实现方法
按日期排序字典中的日期键值对
没问题,这事儿用Python的datetime模块配合排序函数就能轻松搞定,我分几种常用场景给你说明,完全支持自定义日期格式:
核心思路
日期字符串直接按字符串排序很容易踩坑(比如非YYYY-MM-DD格式的话,字符串顺序和实际日期逻辑顺序可能不一致),所以我们需要把日期字符串转换成datetime对象,以此作为排序的可靠依据。
1. 基础场景:默认YYYY-MM-DD格式排序
刚好你例子里的日期就是YYYY-MM-DD格式,直接用下面的代码就行:
from datetime import datetime # 你的原始字典 my_dictionary = {"dates": {"2020-01-01": "something 1", "2019-04-20": "something 2", "2020-03-15": "something 3", "2019-12-31": "something 4"}} # 按日期升序排序,返回排序后的键值对列表 sorted_date_items = sorted(my_dictionary["dates"].items(), key=lambda item: datetime.strptime(item[0], "%Y-%m-%d")) # 如果需要降序排序,加上reverse=True参数即可 sorted_date_items_desc = sorted(my_dictionary["dates"].items(), key=lambda item: datetime.strptime(item[0], "%Y-%m-%d"), reverse=True)
2. 自定义日期格式排序
如果你的日期是其他格式(比如DD/MM/YYYY、MM-DD-YYYY、Jan-20-2019这类),只需要修改strptime里的格式字符串就行:
举个DD/MM/YYYY格式的例子:
# 示例自定义格式的字典 custom_format_dict = {"dates": {"01/01/2020": "something 1", "20/04/2019": "something 2", "15/03/2020": "something 3"}} # 用"%d/%m/%Y"对应DD/MM/YYYY格式排序 sorted_custom_items = sorted(custom_format_dict["dates"].items(), key=lambda item: datetime.strptime(item[0], "%d/%m/%Y"))
给你列几个常用的格式符参考:
%Y: 4位数年份(比如2020)%m: 2位数月份(比如01)%d: 2位数日期(比如01)%b: 月份缩写(比如Jan、Feb)
3. 得到排序后的字典(Python 3.7+)
如果你想要一个保留排序顺序的字典,注意Python 3.7及以上版本的字典才会严格保留插入顺序,所以可以把排序后的键值对列表直接转成字典:
# 转成排序后的字典 sorted_date_dict = dict(sorted_date_items)
这样你就得到了完全按日期排序后的字典啦!
内容的提问来源于stack exchange,提问作者neisor




