使用 ruamel.yaml 时保留字典顺序
Preserving order of dictionary while using ruamel.yaml
我正在使用 ruamel.yaml 将 dict 转储到 yaml 文件。在这样做的同时,我想保持字典的顺序。这就是我遇到问题 的方式。但此解决方案不适用于我的情况:
- 订单未保留。
- 添加标签,如 !!python/object/apply:ruamel.yaml.comments.CommentedMap 或 dictitems
import ruamel.yaml
from ruamel.yaml.comments import CommentedMap as ordereddict
generated_file = os.path.join('data_TEST.yaml')
data_dict = {'Sources': {'coil': None}, 'Magnet': 'ABC', 'Current': ordereddict({'heat': {'i': [[]], 'h': None, }})}
data_dict = ordereddict(data_dict)
with open(generated_file, 'w') as yaml_file:
ruamel.yaml.dump(data_dict, yaml_file, default_flow_style=False)
使用的字典只是一个任意的字典,最后将使用一个看起来可能不同的自动创建的数组。所以,我们不能像我的例子那样硬编码字典中字典的映射。
结果:
!!python/object/apply:ruamel.yaml.comments.CommentedMap
dictitems:
Current: !!python/object/apply:ruamel.yaml.comments.CommentedMap
dictitems:
heat:
h: null
i:
- []
Magnet: ABC
Sources:
coil: null
想要的结果:
Sources:
coil: null
Magnet: ABC
Current:
heat:
h: null
i:
- []
您真的不应该使用在转储时对键进行排序的旧 PyYAML API。
实例化 YAML 实例并使用其转储方法:
yaml = ruamel.yaml.YAML()
yaml.dump(data, stream)
我正在使用 ruamel.yaml 将 dict 转储到 yaml 文件。在这样做的同时,我想保持字典的顺序。这就是我遇到问题
- 订单未保留。
- 添加标签,如 !!python/object/apply:ruamel.yaml.comments.CommentedMap 或 dictitems
import ruamel.yaml
from ruamel.yaml.comments import CommentedMap as ordereddict
generated_file = os.path.join('data_TEST.yaml')
data_dict = {'Sources': {'coil': None}, 'Magnet': 'ABC', 'Current': ordereddict({'heat': {'i': [[]], 'h': None, }})}
data_dict = ordereddict(data_dict)
with open(generated_file, 'w') as yaml_file:
ruamel.yaml.dump(data_dict, yaml_file, default_flow_style=False)
使用的字典只是一个任意的字典,最后将使用一个看起来可能不同的自动创建的数组。所以,我们不能像我的例子那样硬编码字典中字典的映射。
结果:
!!python/object/apply:ruamel.yaml.comments.CommentedMap
dictitems:
Current: !!python/object/apply:ruamel.yaml.comments.CommentedMap
dictitems:
heat:
h: null
i:
- []
Magnet: ABC
Sources:
coil: null
想要的结果:
Sources:
coil: null
Magnet: ABC
Current:
heat:
h: null
i:
- []
您真的不应该使用在转储时对键进行排序的旧 PyYAML API。
实例化 YAML 实例并使用其转储方法:
yaml = ruamel.yaml.YAML()
yaml.dump(data, stream)