Python中如何对多层嵌套字典按项目consumption值升序排序
问题原因
- 第一种写法逻辑错配:你是对顶层的环境条目(
env_preprod/env_prod这类键)做排序,而非对每个环境内部的项目列表排序。 - 第二种写法缺少排序字段指定:lambda表达式直接取
ele[1]是完整的项目属性字典,没有指定用consumption字段作为排序依据;另外注意你给出的JSON结构里consumption键名末尾带了空格,如果实际数据也是这个命名,直接写['consumption']会触发KeyError,属于容易忽略的细节坑。
正确实现方案
Python 3.7及以上版本原生支持字典插入顺序保留,直接用如下写法即可:
# 如果你的实际数据中consumption键名没有尾部空格,把下方的'consumption '改成'consumption'即可 sorted_data = { env: dict(sorted(projects.items(), key=lambda item: item[1]['consumption '])) for env, projects in data.items() }
如果需要兼容Python 3.7以下的版本,使用OrderedDict保证排序顺序:
from collections import OrderedDict sorted_data = { env: OrderedDict(sorted(projects.items(), key=lambda item: item[1]['consumption '])) for env, projects in data.items() }
逻辑说明
- 外层遍历所有环境,保留原有的环境键顺序
- 对每个环境下的所有项目条目按
consumption值做升序排序,排序后重新生成字典 - 最终输出的结构和原有结构完全一致,仅每个环境内的项目顺序调整为按消费值从小到大排列
内容的提问来源于stack exchange,提问作者DrPulse
相关产品推荐
相关产品推荐

