繁体   English   中英

如何使用 PyYaml 或 Ruamel.yaml 仅转储带有 flow_style 的列表

[英]How to dump only lists with flow_style with PyYaml or Ruamel.yaml

我有以下内容:

data = {"values": list(range(3)),'some_key': {'value': 2, 'unit': 'm'}}

当我使用default_flow_style=True将此字典转储到 YAML 时,我得到以下内容:

>>> print(yaml.dump( data, default_flow_style=False))
some_key:
  unit: m
  value: 2
values:
- 0
- 1
- 2

>>> print(yaml.dump( data, default_flow_style=True))
{some_key: {unit: m, value: 2}, values: [0, 1, 2]}

>>> print(yaml.dump( data, default_flow_style=None))
some_key: {unit: m, value: 2}
values: [0, 1, 2]

我想转储这个字典,用 flow_style 保留values (比如在使用default_flow_style=Nonedefault_flow_style=True执行时,但保持some_key的行为与使用default_flow_style=False时完全相同。

有可能实现这一目标吗?

使用 PyYAML 5.3.1

如果不更改作为转储程序一部分的表示器,则无法使用 PyYAML 实现该目标。

在 ruamel.yaml 中,您可以将节点标记为以流模式转储,然后将“以下”的所有内容也转储为流模式(必须如此):

import sys
import ruamel.yaml

def flist(x):
    retval = ruamel.yaml.comments.CommentedSeq(x)
    retval.fa.set_flow_style()  # fa -> format attribute
    return retval

data = {"values": flist(range(3)),'some_key': {'value': 2, 'unit': 'm'}}

yaml = ruamel.yaml.YAML()
yaml.dump(data, sys.stdout)

这使:

values: [0, 1, 2]
some_key:
  value: 2
  unit: m

您首先获得values键,因为它在data定义中是第一个(假设您使用的是最新的 Python 3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM