我正在使用yaml.dump输出字典.它根据键按字母顺序打印出每个项目.
>>> d = {"z":0,"y":0,"x":0}
>>> yaml.dump( d, default_flow_style=False )
'x: 0\ny: 0\nz: 0\n'
Run Code Online (Sandbox Code Playgroud)
有没有办法控制键/值对的顺序?
在我的特定用例中,反向打印(巧合)就足够了.但是为了完整性,我正在寻找一个答案,展示如何更精确地控制订单.
我看过使用collections.OrderedDict但是PyYAML没有(似乎)支持它.我也看过子类化yaml.Dumper,但我无法弄清楚它是否有能力改变项目顺序.
我一直在尝试将字典转储到YAML文件中.问题是导入YAML文件的程序需要按特定顺序的关键字.此订单不是按字母顺序排列的.
import yaml
import os
baseFile = 'myfile.dat'
lyml = [{'BaseFile': baseFile}]
lyml.append({'Environment':{'WaterDepth':0.,'WaveDirection':0.,'WaveGamma':0.,'WaveAlpha':0.}})
CaseName = 'OrderedDict.yml'
CaseDir = r'C:\Users\BTO\Documents\Projects\Mooring code testen'
CaseFile = os.path.join(CaseDir, CaseName)
with open(CaseFile, 'w') as f:
yaml.dump(lyml, f, default_flow_style=False)
Run Code Online (Sandbox Code Playgroud)
这会生成一个*.yml文件,其格式如下:
- BaseFile: myfile.dat
- Environment:
WaterDepth: 0.0
WaveAlpha: 0.0
WaveDirection: 0.0
WaveGamma: 0.0
Run Code Online (Sandbox Code Playgroud)
但我想要的是订单保留:
- BaseFile: myfile.dat
- Environment:
WaterDepth: 0.0
WaveDirection: 0.0
WaveGamma: 0.0
WaveAlpha: 0.0
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我的问题很简单。我有一个带有自定义订单的 OrderredDict 对象,我想将其转换为 yaml 格式。但似乎 yaml.dump 不能将 Orderredict 作为输入。有谁知道怎么做?