Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中迭代YAML列表_Python_Yaml_Items_Iteritems - Fatal编程技术网

在python中迭代YAML列表

在python中迭代YAML列表,python,yaml,items,iteritems,Python,Yaml,Items,Iteritems,我正在尝试读取一个YAML文件,并按照文件中的顺序打印出我在那里的列表 因此,亚马尔: b: ... a: ... 我的python是: for key, value in yaml.load(open(input_file)).items(): print(str(key)) 输出变为: a b 但是我需要它是b然后是a。我还尝试了iteritems(),得到了相同的结果。yaml.load在这种情况下,只返回一个dict,默认情况下是无序的。如果您关心保留顺序,则需要使用,请参

我正在尝试读取一个YAML文件,并按照文件中的顺序打印出我在那里的列表

因此,亚马尔:

b: ...
a: ...
我的python是:

for key, value in yaml.load(open(input_file)).items():
    print(str(key))
输出变为:

a
b

但是我需要它是
b
然后是
a
。我还尝试了
iteritems()
,得到了相同的结果。

yaml.load
在这种情况下,只返回一个
dict
,默认情况下是无序的。如果您关心保留顺序,则需要使用,请参阅以获取如何执行此操作的示例。

如果您的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 1.1和PyYAML,则没有这样的顺序保证,但是您首先不应该使用
YAML.load()
,因为这是不安全的。

为什么要使用
print(str(key))
,这会产生与
print(key)不同的结果吗
?如果您的YAML确实在
a
之前有空格,而在
b
之前没有空格,则YAML无效。但是,由于在您的输出中,空格神奇地出现在
b
之前,我认为这是一个格式错误。谢谢,这是有道理的。我需要更仔细地了解一下YAML,才能弄清楚这一点bette,但感谢您为我指明了正确的方向:)
yaml = YAML(typ='safe')