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

Python3.8中调整字典键顺序:将'1e'移至1与2之间

问题:调整Python字典的键顺序

初始字典:

my_dict = {1: [x, y, z], 2: [x1, y1, z1]}

添加键'1e'后变为:

my_dict = {1: [x, y, z], 2: [x1, y1, z1], '1e': [x2, y2, z2]}

需要将键顺序调整为1、'1e'、2,预期结果:

my_dict = {1: [x, y, z], '1e': [x2, y2, z2], 2: [x1, y1, z1]}

补充说明:

  • x、x1、x2为字符串格式的日期(如'%Y-%m-%d')
  • 尝试过两种排序方法均失败:
    1. 代码:
      new_dict = OrderedDict(sorted(dict.items(), key=lambda t: t[1]))
      
      报错:浮点数与字符串无法排序
    2. 代码:
      new_dict = sorted(dict.items(), key=lambda x: datetime.strptime(x[1],'%Y-%m-%d'), reverse=True)
      
      报错:找不到strptime

解决方案

方法一:直接指定固定键顺序

如果需求是固定顺序1 → '1e' → 2,无需动态排序,直接按目标顺序重新构造字典即可(Python 3.7+ 普通字典会保留插入顺序):

# 定义目标键顺序
target_order = [1, '1e', 2]
# 按顺序生成新字典
ordered_dict = {key: my_dict[key] for key in target_order}

执行后ordered_dict的键顺序完全符合预期。

方法二:修正按日期排序的代码

如果真实需求是按值列表中的日期字符串排序,需要修正两处错误:

  1. 必须先导入datetime模块;
  2. 每个键对应的值是列表,要取列表第一个元素(即日期字符串),而非整个列表。

修正后的代码:

from datetime import datetime

# 按日期升序排序,需降序则添加reverse=True
sorted_items = sorted(my_dict.items(), key=lambda item: datetime.strptime(item[1][0], '%Y-%m-%d'))
# Python 3.7+ 直接用dict()转换即可保留顺序,也可使用OrderedDict
new_dict = dict(sorted_items)

此代码可根据日期字符串正确排序,不会出现类型不匹配的报错。

内容的提问来源于stack exchange,提问作者Buschino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:15:08