Отформатируйте список словарей в yaml, используя reumal.yaml python

Когда я выгружаю свои данные yaml, используя yaml.dump(stream_data)

Я становлюсь ниже вывода

models:
 - model: "a"
   type: "x"
   groups:[]
   #bunch of properties...
 - model: "b"
   type: "y"
   groups: []
   #bunch of properties...

желаемый результат:

models:
 - { model: "a", type: "x", groups:[]}
 - { model: "b", type: "y", groups: []}
   

person shashi kumar v    schedule 27.07.2020    source источник


Ответы (1)


Что вам нужно, так это два уровня узлов в стиле потока, и в ruamel.yaml единственный способ создать это принудительно в стиле потока для вложенных диктов:

import sys
import ruamel.yaml

def flow_dict(**kw):
    result = ruamel.yaml.comments.CommentedMap(**kw)
    result.fa.set_flow_style()
    return result

data = dict(models=[flow_dict(model='a', type='x', groups=[]), flow_dict(model='b', type='y', groups=[])])

yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
yaml.dump(data, sys.stdout)

который дает:

models:
  - {model: a, type: x, groups: []}
  - {model: b, type: y, groups: []}

Невозможно (кроме постобработки выходного потока) получить пробел между клавишами { и model.

person Anthon    schedule 27.07.2020