You need to enable JavaScript to run this app. 如何将Python嵌套字典按键深度升序排序后打印为YAML格式
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python嵌套字典按键深度升序排序后打印为YAML格式

嵌套字典按层级规则排序生成目标YAML的实现方法

因为PyYAML在sort_keys=False模式下会完全保留传入字典的插入顺序,要实现“同层级下标量类型键在前、嵌套字典类型键在后”的输出效果,只需要在序列化前对原字典做一次递归重排即可,不需要修改原有字典的键定义逻辑。

实现规则

按如下逻辑递归处理每一层字典:

  • 遍历当前层所有键值对,拆分为两组
    • 第一组:值为非字典类型的键值对(即直接输出标量值的键)
    • 第二组:值为嵌套字典类型的键值对,需要对这类值递归执行相同的排序逻辑
  • 重排当前层字典的顺序:先放入第一组的所有键值对,再放入第二组的所有键值对
  • 同组内的键完全保留原字典中的相对插入顺序,不会额外按键名字母排序

可直接复用的代码

import yaml

def sort_dict_by_value_type(raw_dict):
    reorganized = {}
    leaf_items = {}
    nested_items = {}
    for key, value in raw_dict.items():
        if isinstance(value, dict):
            # 递归处理嵌套字典结构
            nested_items[key] = sort_dict_by_value_type(value)
        else:
            leaf_items[key] = value
    # 先排列标量键,再排列嵌套字典键,全程保留组内原有顺序
    reorganized.update(leaf_items)
    reorganized.update(nested_items)
    return reorganized

# 传入原有业务逻辑生成的字典mydict
processed_dict = sort_dict_by_value_type(mydict)
print(yaml.dump(processed_dict, sort_keys=False))

匹配效果说明

运行上述代码后,输出的YAML会完全符合你给出的目标格式:

  • DeviceInfo层级下,autoApply、comment、networkRole、region、group这些标量键会全部排列在contact、location两个嵌套字典之前
  • 嵌套字典内部的键顺序完全保留原有定义顺序,不会被打乱
  • 全程未开启字典键的字母排序,和你之前依赖sort_keys=False保留自定义顺序的使用习惯完全兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 15:45:11