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

Python两层嵌套字典按键排序的Pythonic实现方法

两层嵌套字典按键排序的Pythonic实现

问题描述

现有如下结构的两层嵌套字典对象:

dict_1 = {
    'c': {
        'c3': [],
        'c1': [],
        'c2': []
    },
    'a': {
        'a3': [],
        'a1': [],
        'a2': []
    },
    'b': {
        'b3': [],
        'b1': [],
        'b2': []
    },
}

需要完成两个层级的字典按键排序操作:

  • 第一层(顶层):按照顶层字典的键做升序排序
  • 第二层(子层):每个顶层键对应的嵌套字典,按照自身的键做升序排序
    排序完成后的预期输出如下:
dict_1 = {
    'a': {
        'a1': [],
        'a2': [],
        'a3': []
    },
    'b': {
        'b1': [],
        'b2': [],
        'b3': []
    },
    'c': {
        'c1': [],
        'c2': [],
        'c3': []
    },
}

实现方案

你目前写出的嵌套字典推导式已经符合Python编码风格,还可以做进一步简化,让代码更简洁易读:
由于字典items()返回的键值对元组,默认排序规则就是按元组首位(也就是字典键)排序,不需要额外传入key参数指定lambda规则;同时内层排序后的键值对可以直接用dict()构造器生成新字典,不需要额外写内层推导式,简化后的代码如下:

dict_1 = {k: dict(sorted(v.items())) for k, v in sorted(dict_1.items())}

运行后输出结果和预期完全一致:

{'a': {'a1': [], 'a2': [], 'a3': []}, 'b': {'b1': [], 'b2': [], 'b3': []}, 'c': {'c1': [], 'c2': [], 'c3': []}}

注意:该写法依赖Python 3.7+版本的字典特性——从Python 3.7开始,普通字典正式保证插入顺序留存;如果需要兼容3.7以下版本,请使用collections.OrderedDict替代普通字典存储排序结果。

如果需要处理更深层级的嵌套字典排序,可以封装通用递归函数,无需逐层手写排序逻辑:

def sort_nested_dict(input_dict):
    sorted_dict = {}
    for key, value in sorted(input_dict.items()):
        sorted_dict[key] = sort_nested_dict(value) if isinstance(value, dict) else value
    return sorted_dict

dict_1 = sort_nested_dict(dict_1)

该函数会自动遍历所有嵌套层级,对每一层字典都执行按键升序排序,适配任意深度的字典嵌套场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:57:37