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') - 尝试过两种排序方法均失败:
- 代码:
报错:浮点数与字符串无法排序new_dict = OrderedDict(sorted(dict.items(), key=lambda t: t[1])) - 代码:
报错:找不到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的键顺序完全符合预期。
方法二:修正按日期排序的代码
如果真实需求是按值列表中的日期字符串排序,需要修正两处错误:
- 必须先导入
datetime模块; - 每个键对应的值是列表,要取列表第一个元素(即日期字符串),而非整个列表。
修正后的代码:
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
相关产品推荐
相关产品推荐

