【发布时间】:2020-10-22 09:59:54
【问题描述】:
我想将 YAML 文件作为 OrderedDict 加载到 Python 中。我正在使用yamlordereddictloader 来保留订单。
但是,我注意到别名对象“过早”放置在输出的 OrderedDict 中。
如何在读入 Python 时保留此映射的顺序,最好是 OrderedDict?不编写一些自定义解析是否可以达到这个结果?
注意事项:
- 我并不特别关心使用的方法,只要最终结果相同即可。
- 使用序列而不是映射是有问题的,因为它们会导致嵌套输出,而且我不能简单地展平所有内容(一些嵌套是合适的)。
- 当我尝试仅使用
!!omap时,我似乎无法将别名映射 (d1.dt) 合并到d2映射中。 - 我在 Python 3.6 中,如果我不使用此加载程序或
!!omap订单不保留(显然与此处的顶部“更新”相反:https://stackoverflow.com/a/21912744/2343633)
import yaml
import yamlordereddictloader
yaml_file = """
d1:
id:
nm1: val1
dt: &dt
nm2: val2
nm3: val3
d2: # expect nm4, nm2, nm3
nm4: val4
<<: *dt
"""
out = yaml.load(yaml_file, Loader=yamlordereddictloader.Loader)
keys = [x for x in out['d2']]
print(keys) # ['nm2', 'nm3', 'nm4']
assert keys==['nm4', 'nm2', 'nm3'], "order from YAML file is not preserved, aliased keys placed too early"
【问题讨论】:
标签: yaml python-3.6 pyyaml ordereddictionary