如何在ruamel.yaml中混合流样式与块样式导出YAML?
实现嵌套字典块样式、列表流样式的ruamel.yaml方案
是的,你需要编写自定义表示器来实现这个需求——因为default_flow_style只能全局或按层级控制整体的流/块模式,无法单独对字典和列表设置不同的显示规则。
具体实现步骤
- 导入ruamel.yaml核心模块
- 自定义列表的表示器函数,强制让列表以流样式输出
- 将自定义表示器注册到YAML实例中,保持字典的默认块样式不变
示例代码
from ruamel.yaml import YAML import sys yaml = YAML() # 自定义列表表示器,强制使用流样式 def represent_list_flow(dumper, data): return dumper.represent_sequence('tag:yaml.org,2002:seq', data, flow_style=True) # 注册自定义表示器,覆盖列表的默认输出逻辑 yaml.representer.add_representer(list, represent_list_flow) # 目标字典 d = {'a': {'b': {'c': {'x': 1, 'y': 1}, 'd': [1, 2, 3], 'e': {'f': 1, 'g': 1} }}} # 输出YAML内容 yaml.dump(d, sys.stdout)
输出效果
a: b: c: x: 1 y: 1 d: [1, 2, 3] e: f: 1 g: 1
所有嵌套字典保持块样式排版,列表则以流样式紧凑显示,完全符合需求。
内容的提问来源于stack exchange,提问作者harsh
相关产品推荐
相关产品推荐

