我们在
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 以正确的顺序看到数据。
有人见过这种行为吗?如果是这样,可能是什么原因造成的,如何纠正才能维持我们的列表排序?
提前谢谢你。