You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:06:24