我正在尝试将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?
答案 0 :(得分:3)
在YAML规范中明确指出映射键没有顺序。但是他们有一个文件。如果你想用一种简单的方法来解决这个问题,用ruamel.yaml取代PyYAML(免责声明:我是该包的作者,这是PyYAML的超集)并使用round_trip_load()
,它将为你提供无序的词典使用单个映射项序列元素的麻烦,你需要指定有序的dicts"官方"方式。
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
BTW PyYAML没有按键排序,排序只是计算哈希值并在python中插入整数键1
,2
,3
的副作用{ {1}}秒。