将文件加载到yaml时如何维护键的插入顺序?

时间:2016-09-06 19:22:42

标签: python dictionary yaml pyyaml

我正在尝试将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?

1 个答案:

答案 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中插入整数键123的副作用{ {1}}秒。