如何按Date字段排序Python字典并保持数据关联与日期格式?
解决方案:按日期排序并保持字段对应关系
要实现按Date字段排序且其他字段索引同步,核心是先把整行数据打包排序,再重组字典,同时可以轻松保留带斜杠的原始日期格式。以下是具体步骤和代码:
步骤1:打包行数据并处理日期排序键
首先将字典中各列的对应数据打包成“行”,同时把日期字符串转成datetime对象(用于排序比较),并保留原始带斜杠的日期字符串:
import datetime dummy_data = { "Date":["01/24/2029","10/28/2027", "01/24/2024","03/24/2024"], "Company Name":["Mcdonalds", "Burger King", "KFC","Popeyes"], "File_name_location":["C/Documents/Files/invoice1.pdf", "C/Documents/Files/invoice2.pdf","C/Documents/Files/invoice3.pdf", "C/Documents/Files/invoice4.pdf"], } # 打包所有行数据:(原始日期字符串, 公司名, 文件路径) rows = list(zip(dummy_data["Date"], dummy_data["Company Name"], dummy_data["File_name_location"])) # 生成带排序用日期对象的行数据:(日期对象, 原始日期字符串, 公司名, 文件路径) processed_rows = [] for date_str, company, file_path in rows: date_obj = datetime.datetime.strptime(date_str, "%m/%d/%Y").date() processed_rows.append((date_obj, date_str, company, file_path))
步骤2:按日期排序行数据
用sorted()函数按日期对象从小到大排序(若要从大到小,加reverse=True参数):
# 按日期升序排序 sorted_rows = sorted(processed_rows, key=lambda x: x[0])
步骤3:重组排序后的字典
把排序后的行数据拆回原来的字典结构,这里直接使用原始带斜杠的日期字符串:
sorted_data = { "Date": [row[1] for row in sorted_rows], "Company Name": [row[2] for row in sorted_rows], "File_name_location": [row[3] for row in sorted_rows] }
结果验证
打印sorted_data会得到:
{ "Date": ["01/24/2024", "03/24/2024", "10/28/2027", "01/24/2029"], "Company Name": ["KFC", "Popeyes", "Burger King", "Mcdonalds"], "File_name_location": ["C/Documents/Files/invoice3.pdf", "C/Documents/Files/invoice4.pdf", "C/Documents/Files/invoice2.pdf", "C/Documents/Files/invoice1.pdf"] }
补充说明
- 你之前的代码
sorted(dummy_data["Date"])只单独排序了日期列表,没有关联其他字段,所以无法同步索引,必须打包整行数据排序。 - Python 3.7+的普通字典已经默认保持插入顺序,无需使用
OrderedDict。 - 如果不需要保留原始日期格式,也可以直接用
datetime对象作为Date字段的值,只需把重组字典时的row[1]换成row[0]即可。
内容的提问来源于stack exchange,提问作者A Beautiful Trend
相关产品推荐
相关产品推荐

