在 python 中迭代 YAML 列表

Rik*_*g09 5 python yaml items iteritems

我正在尝试读取 YAML 文件并按照文件中的顺序打印出其中的列表。

所以 YAML:

b: ...
a: ...
Run Code Online (Sandbox Code Playgroud)

我的蟒蛇是:

for key, value in yaml.load(open(input_file)).items():
    print(str(key))
Run Code Online (Sandbox Code Playgroud)

输出变为:

a
b
Run Code Online (Sandbox Code Playgroud)

但我需要它是b那时a。我也尝试过iteritems(),得到了同样的结果。

Ant*_*hon 4

如果您的 YAML 文件包含:

b: 2
a: 1
Run Code Online (Sandbox Code Playgroud)

然后像这样解析:

from ruamel.yaml import YAML

yaml = YAML()
input_file = 'input.yaml'

for key, value in yaml.load(open(input_file)).items():
    print(str(key))
Run Code Online (Sandbox Code Playgroud)

b首先打印。但是,如果您使用(更快):

yaml = YAML(typ='safe')
Run Code Online (Sandbox Code Playgroud)

这是无法保证的,因为 YAML 规范不保证映射键的顺序。

如果您使用 YAML 1.1 和 PyYAML,则没有这样的顺序保证,但是您不应该yaml.load()首先使用,因为它不安全。