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

如何在ruamel.yaml中混合流样式与块样式导出YAML?

实现嵌套字典块样式、列表流样式的ruamel.yaml方案

是的,你需要编写自定义表示器来实现这个需求——因为default_flow_style只能全局或按层级控制整体的流/块模式,无法单独对字典和列表设置不同的显示规则。

具体实现步骤

  1. 导入ruamel.yaml核心模块
  2. 自定义列表的表示器函数,强制让列表以流样式输出
  3. 将自定义表示器注册到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:39:57