<分区>
我正在尝试将 YAML 用于 python 脚本。我编写的 YAML 文件类似于:
1:
name: apple
price: 5
3:
name: orange
price: 6
2:
name: pear
price: 2
当我使用 yaml.load
加载 YAML 文件时,字典按键排序,因此它按顺序 1、2、3 显示。如何维护顺序 1、3、2?
<分区>
我正在尝试将 YAML 用于 python 脚本。我编写的 YAML 文件类似于:
1:
name: apple
price: 5
3:
name: orange
price: 6
2:
name: pear
price: 2
当我使用 yaml.load
加载 YAML 文件时,字典按键排序,因此它按顺序 1、2、3 显示。如何维护顺序 1、3、2?
最佳答案
在 YAML 规范中明确指出映射键没有顺序。但是他们有一个文件。如果你想要一个简单的方法来解决这个问题,请将 PyYAML 替换为 ruamel.yaml (免责声明:我是该包的作者,它是 PyYAML 的超集)并使用 round_trip_load()
,它将为您提供有序的字典,而无需使用您需要的单个映射项序列元素用于以“官方”方式指定有序的字典。
import ruamel.yaml
yaml_str = """\
1:
name: apple
price: 5
3:
name: orange
price: 6
2:
name: pear
price: 2
"""
data = ruamel.yaml.round_trip_load(yaml_str)
for key in data:
print(key)
给予
1
3
2
顺便说一句,PyYAML 不按键排序,排序只是计算散列和插入整数键的副作用 1
, 2
, 3
在 python dict
中。
关于python - 将文件加载到yaml时如何保持键的插入顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39356393/