Python YAML *不*保留列表中的顺序

问题描述 投票:0回答:0

我们在

PyYAML version 5.3.1
下使用
Python 3.7

我们发现列表的顺序没有被保留。

例如,假设在文件

example.yaml
中,我们有以下...

---
data:
  - start
  - next
...

假设我们的

Python 3.7
程序是这样的:

import yaml

with open('example.yaml', 'r') as f:
    input_data = f.read()
    datadict = yaml.load(input_data, Loader=yaml.FullLoader)
    data = datadict['data']
    print(f'{data}')

当我们在不同的机器和不同的环境(命令行、守护进程、REST 调用、etc)上使用相同的输入数据运行这个程序时,有时它会打印出这个:

['start', 'next']

...有时它会打印出这个:

['next', 'start']

这几乎就像

yaml
最初将列表元素存储在一个集合中,然后将其转换为列表,因为不能保证集合的元素顺序。或者
yaml
有时会尝试对进入列表的数据进行排序。

我们用

yaml.SafeLoader
而不是
yaml.FullLoader
得到相同的行为。

此外,如果我们在

print(input_data)
语句之前放置一个
yaml.load
语句,我们 always 以正确的顺序看到数据。

有人见过这种行为吗?如果是这样,可能是什么原因造成的,如何纠正才能维持我们的列表排序?

提前谢谢你。

python list yaml
© www.soinside.com 2019 - 2024. All rights reserved.