I'm executing the following python code:
import yaml
foo = {
'name': 'foo',
'my_list': [{'foo': 'test', 'bar': 'test2'}, {'foo': 'test3', 'bar': 'test4'}],
'hello': 'world'
}
print(yaml.dump(foo, default_flow_style=False))
but is printing:
hello: world
my_list:
- bar: test2
foo: test
- bar: test4
foo: test3
name: foo
instead of:
hello: world
my_list:
- bar: test2
foo: test
- bar: test4
foo: test3
name: foo
How can I indent the my_list elements this way?
解决方案
This ticket suggests the current implementation correctly follows the spec:
The “-”, “?” and “:” characters used to denote block collection entries are perceived by people to be part of the indentation. This is handled on a case-by-case basis by the relevant productions.
On the same thread, there is also this code snippet (modified to fit your example) to get the behavior you are looking for:
import yaml
class MyDumper(yaml.Dumper):
def increase_indent(self, flow=False, indentless=False):
return super(MyDumper, self).increase_indent(flow, False)
foo = {
'name': 'foo',
'my_list': [
{'foo': 'test', 'bar': 'test2'},
{'foo': 'test3', 'bar': 'test4'}],
'hello': 'world',
}
print yaml.dump(foo, Dumper=MyDumper, default_flow_style=False)