相关疑难解决方法(0)

PyYAML可以以非字母顺序转储dict项吗?

我正在使用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,但我无法弄清楚它是否有能力改变项目顺序.

python dictionary yaml pyyaml

36
推荐指数
4
解决办法
3万
查看次数

在保留顺序的同时将字典转储到YAML文件

我一直在尝试将字典转储到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)

这可能吗?

dictionary yaml python-3.x

8
推荐指数
3
解决办法
1万
查看次数

如何在 yaml.dump 或 yaml.safe_dump 中使用 OrderedDict 作为输入?

我的问题很简单。我有一个带有自定义订单的 OrderredDict 对象,我想将其转换为 yaml 格式。但似乎 yaml.dump 不能将 Orderredict 作为输入。有谁知道怎么做?

python yaml

5
推荐指数
2
解决办法
4113
查看次数

标签 统计

yaml ×3

dictionary ×2

python ×2

python-3.x ×1

pyyaml ×1