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

How to maintain order of insertion of keys when loading file into yaml?

我正在尝试将 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(),它会给你有序的字典而不使用单个映射项序列元素的麻烦,您需要以 "official" 方式指定有序字典。

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 不按键排序,排序只是计算散列和插入整数键 123 的副作用 python dicts.