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

标签 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?

最佳答案

在 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/

相关文章:

tags - 使用 YAML 标签来表示类型

windows - Docker + Windows + 普罗米修斯 : How/Where to supply the configuration files

python - 网页抓取打印换行符

python - 为什么 Tkinter 在绘图时会删除之前的矩形?

python - 为一个键分配多个值?

java - 按多个字段对列表中的对象进行分组

C# Linq问题

尝试附加相同类型的结构时,Go 返回错误

python - 如何在正确的 python 版本中安装 numpy 和 matplotlib?

python - F查找字符串值的长度,但不查找数字值的长度