如何按自定义格式日期值对Python字典进行排序?
按自定义日期格式排序Python字典
方法一:利用已排序的日期列表索引排序
如果你已经有了排序后的日期列表,直接通过日期在列表中的索引位置作为排序依据即可:
- 定义原始字典和已排序的日期列表
original_dict = {'Charles':'01/02-21:00','Martin':'01/03-22:00','David':'01/02-19:00'} sorted_dates = ['01/02-19:00','01/02-21:00','01/03-22:00']
- 对字典的键值对按日期索引排序,再转为有序字典(Python 3.7+ 普通字典默认保留插入顺序)
sorted_items = sorted(original_dict.items(), key=lambda x: sorted_dates.index(x[1])) sorted_dict = dict(sorted_items) print(sorted_dict) # 输出: {'David': '01/02-19:00', 'Charles': '01/02-21:00', 'Martin': '01/03-22:00'}
方法二:直接解析自定义日期格式排序
如果没有预先准备排序后的日期列表,可将特殊格式的日期字符串解析为可比较的datetime对象,再完成排序:
- 编写日期解析函数,把
day/month-hour:minute格式转为datetime对象
from datetime import datetime def parse_custom_date(date_str): date_part, time_part = date_str.split('-') day, month = date_part.split('/') hour, minute = time_part.split(':') # 年份不影响排序,可任意指定 return datetime(2024, int(month), int(day), int(hour), int(minute))
- 基于解析后的日期对字典排序
sorted_dict = dict(sorted(original_dict.items(), key=lambda x: parse_custom_date(x[1]))) print(sorted_dict) # 输出同样符合预期
注意事项
- Python 3.7及以上版本的普通字典会保留插入顺序,所以直接用
dict()转换排序后的键值对列表即可得到有序字典;如果是更低版本,需要使用collections.OrderedDict。 - 若
sorted_dates列表很长,建议先把日期转成索引映射字典(date_index = {date:i for i,date in enumerate(sorted_dates)}),排序时用key=lambda x: date_index[x[1]],避免多次调用index()带来的性能损耗。
内容的提问来源于stack exchange,提问作者flair
相关产品推荐
相关产品推荐

