如何阻止ruamel.yaml在dump时对字典键排序?(Python3.11/0.17.21)
解决ruamel.yaml dump时键排序问题
ruamel.yaml默认会对字典键按字母排序,即便Python 3.7+的字典本身是有序的,也会被覆盖。要保留原插入顺序,只需关闭排序配置:
方法一:使用YAML实例配置
创建ruamel.yaml.YAML()实例后,设置sort_keys=False即可:
import ruamel.yaml data = { 'EMEA': { 'rating': 5, 'leads': 100, 'locs': ['DE', 'FR'] }, 'APAC': { 'rating': 4, 'leads': 150, 'locs': ['SG', 'JP'] } } # 初始化YAML实例并关闭键排序 yaml = ruamel.yaml.YAML() yaml.sort_keys = False # 输出到文件 with open('output.yaml', 'w') as f: yaml.dump(data, f) # 直接打印到控制台 yaml.dump(data, sys.stdout)
方法二:直接调用dump函数传参
如果习惯使用旧的直接调用方式,可在dump()中传入sort_keys=False参数:
import ruamel.yaml import sys data = { 'EMEA': { 'rating': 5, 'leads': 100, 'locs': ['DE', 'FR'] }, 'APAC': { 'rating': 4, 'leads': 150, 'locs': ['SG', 'JP'] } } ruamel.yaml.dump(data, sys.stdout, sort_keys=False)
两种方法都能让dump输出的键顺序与原字典插入顺序完全一致,顶级键EMEA会保持在APAC之前,二级键rating、leads、locs的顺序也不会被打乱。
内容的提问来源于stack exchange,提问作者pepoluan
相关产品推荐
相关产品推荐

