遍历 python 中的 YAML 列表
Iterating through YAML list in python
我正在尝试读取 YAML 文件并按照文件中的顺序打印出我在其中的列表。
所以 YAML:
b: ...
a: ...
我的 python 是:
for key, value in yaml.load(open(input_file)).items():
print(str(key))
输出变为:
a
b
但是我需要先 b
然后 a
。我也试过 iteritems()
,我得到了同样的结果。
yaml.load
在这种情况下只是 returns a dict
,默认情况下是无序的。如果您关心保留顺序,则需要使用 OrderedDict
, see here 作为示例来说明如何做到这一点。
如果您的 YAML 文件包含:
b: 2
a: 1
然后像这样解析:
from ruamel.yaml import YAML
yaml = YAML()
input_file = 'input.yaml'
for key, value in yaml.load(open(input_file)).items():
print(str(key))
将首先打印 b
。但是,如果您使用(更快):
yaml = YAML(typ='safe')
这不能保证,因为 YAML 规范不保证映射键的顺序。
如果您使用的是 YAML 1.1 和 PyYAML,则没有这样的顺序保证,但是您一开始就不应该使用 yaml.load()
,因为它不安全。
我正在尝试读取 YAML 文件并按照文件中的顺序打印出我在其中的列表。
所以 YAML:
b: ...
a: ...
我的 python 是:
for key, value in yaml.load(open(input_file)).items():
print(str(key))
输出变为:
a
b
但是我需要先 b
然后 a
。我也试过 iteritems()
,我得到了同样的结果。
yaml.load
在这种情况下只是 returns a dict
,默认情况下是无序的。如果您关心保留顺序,则需要使用 OrderedDict
, see here 作为示例来说明如何做到这一点。
如果您的 YAML 文件包含:
b: 2
a: 1
然后像这样解析:
from ruamel.yaml import YAML
yaml = YAML()
input_file = 'input.yaml'
for key, value in yaml.load(open(input_file)).items():
print(str(key))
将首先打印 b
。但是,如果您使用(更快):
yaml = YAML(typ='safe')
这不能保证,因为 YAML 规范不保证映射键的顺序。
如果您使用的是 YAML 1.1 和 PyYAML,则没有这样的顺序保证,但是您一开始就不应该使用 yaml.load()
,因为它不安全。