如何编程根据字典键名调整键值对位置使同参数键相邻排列
字典重排通用方案
实现前提
Python 3.7+版本原生字典默认保留键值对插入顺序,排序后生成的新字典可以直接按固定顺序导出CSV;如果使用更低版本Python,把代码里的dict()替换为collections.OrderedDict()即可,排序逻辑完全通用。
排序规则
排序按两个优先级依次判断:
- 第一优先级:提取每个键的参数基础名(即去掉末尾固定后缀
_actual/_pred后的部分),同一基础名的键归为相邻组 - 第二优先级:同组内固定
_actual后缀的键排在_pred前,保证同参数的两个键顺序符合预期 - 若存在不带这两个固定后缀的键,统一排在所有参数对之后,不会干扰目标顺序
可直接复用的代码
origin_dict = {"par1_actual": 100, "par2_actual": 150, "par1_pred": 120, "par2_pred": 140} def dict_sort_key(item): key, _ = item if key.endswith("_actual"): # 匹配actual后缀,同组内优先级最高 return (key[:-len("_actual")], 0) elif key.endswith("_pred"): # 匹配pred后缀,同组内优先级次位 return (key[:-len("_pred")], 1) else: # 非目标后缀的键优先级最低,排在最后 return (key, 2) sorted_dict = dict(sorted(origin_dict.items(), key=dict_sort_key)) print(sorted_dict) # 输出结果:{'par1_actual': 100, 'par1_pred': 120, 'par2_actual': 150, 'par2_pred': 140}
适配说明
- 不受参数名称影响:不管参数名是par1、speed还是train_loss这类本身带下划线的名称,只要后缀固定为
_actual/_pred就能正确分组 - 不受参数数量影响:参数增删不需要修改排序逻辑
CSV导出提示
导出CSV时直接按sorted_dict的顺序取键做表头、取值做行数据即可,不需要额外调整顺序。
内容的提问来源于stack exchange,提问作者dani shamir
相关产品推荐
相关产品推荐

