转储嵌套列表的Ruamel yaml格式化
问题描述:
我想转储一个包含嵌套列表的组件的字典,其中列表的每一行都在其自己的行上。我也想维护字典顺序。转储嵌套列表的Ruamel yaml格式化
这里有一个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()
。