将文件加载到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 不按键排序,排序只是计算散列和插入整数键 1
、2
、3
的副作用 python dict
s.
我正在尝试将 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 不按键排序,排序只是计算散列和插入整数键 1
、2
、3
的副作用 python dict
s.