gpt4 book ai didi

python - Ruamel yaml 转储嵌套列表的格式

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:46 26 4
gpt4 key购买 nike

我想转储一个包含嵌套列表组件的字典,其中列表的每一行都在自己的行上。我还想保持字典顺序。

这是一个 MWE:

import sys

from ruamel import yaml
from ruamel.yaml import YAML

d = {'b':1,
'a':[[1, 2],[3, 4]]}

# desired output:
# b: 1
# a:
# - [1, 2]
# - [3, 4]

print()
yaml.dump(d, sys.stdout)
print('\n')
YAML().dump(d, sys.stdout)

这是我实际得到的:

a:
- [1, 2]
- [3, 4]
b: 1


b: 1
a:
- - 1
- 2
- - 3
- 4

第一种方法具有我想要的嵌套列表格式,但丢失了字典顺序。 (这并不奇怪,因为我没有使用往返转储程序)第二种方法设法维持顺序,但丢失了我想要的嵌套列表格式。每当我使用往返转储程序时,我都会丢失良好的嵌套列表格式。

这里有什么提示吗?

最佳答案

你的字典有你想要的顺序要么是运气好,要么是因为你使用的是Python 3.6。在较旧版本的 Python(即 < 3.6)中,无法保证此顺序。

如果您仅以 3.6 为目标并且有 ruamel.yaml>=0.15.32 您可以执行以下操作:

import sys

from ruamel import yaml
from ruamel.yaml import YAML


d = {'b':1,
'a':[[1, 2],[3, 4]]}

y = YAML()
y.default_flow_style = None
y.dump(d, sys.stdout)

如果您有旧版本和 Python 3.6:

import sys

from ruamel import yaml
from ruamel.yaml import YAML

y = YAML()

d = {'b':1,
'a':[y.seq([1, 2]),y.seq([3, 4])]}


for seq in d['a']:
seq.fa.set_flow_style()
y.dump(d, sys.stdout)

获取:

b: 1
a:
- [1, 2]
- [3, 4]

要在旧版本的 Python 中一致地获得您想要的顺序,您应该这样做:

d = y.map()
d['b'] = 1
d['a'] = y.seq([1, 2]),y.seq([3, 4])

并且使用ruamel.yaml>=0.15.32,您可以省略对y.seq()的调用。

关于python - Ruamel yaml 转储嵌套列表的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45791712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com