簡體   English   中英

使用 ruamel.yaml 時保留字典的順序

[英]Preserving order of dictionary while using ruamel.yaml

我正在使用 ruamel.yaml 將字典轉儲到 yaml 文件。 在這樣做的同時,我想保持字典的順序。 這就是我遇到問題Keep YAML file order with ruamel 的原因 但此解決方案不適用於我的情況:

  • 訂單未保留。
  • 添加標簽如:.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 實例並使用它的 dump 方法:

 yaml = ruamel.yaml.YAML()
 yaml.dump(data, stream)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM