Convert Python dictionary to yaml
By default, PyYAML
chooses the style of a collection depending on whether it has nested collections. If a collection has nested collections, it will be assigned the block style. Otherwise it will have the flow style.
If you want collections to be always serialized in the block style, set the parameter default_flow_style
of dump() to False
. For instance,
>> print(yaml.dump(yaml.load(document), default_flow_style=False))
a: 1
b:
c: 3
d: 4
Documentation: https://pyyaml.org/wiki/PyYAMLDocumentation
Harsha Biyani
Updated on October 12, 2020Comments
-
Harsha Biyani over 3 years
I have a dictionary, I am converting dictionary to yaml using
yaml
module in python. But Yaml is not converting properly.output_data = { 'resources': [{ 'type': 'compute.v1.instance', 'name': 'vm-created-by-deployment-manager', 'properties': { 'disks': [{ 'deviceName': '$disks_deviceName$', 'boot': '$disks_boot$', 'initializeParams': { 'sourceImage': '$disks_initializeParams_sourceImage$' }, 'autoDelete': '$disks_autoDelete$', 'type': '$disks_type$' }], 'machineType': '$machineType$', 'zone': '$zone$', 'networkInterfaces': [{ 'network': '$networkInterfaces_network$' }] } }] }
I tried :
import yaml f = open('meta.yaml', 'w+') yaml.dump(output_data, f, allow_unicode=True)
I am getting
meta.yaml
file as following:resources: - name: vm-created-by-deployment-manager properties: disks: - autoDelete: $disks_autoDelete$ boot: $disks_boot$ deviceName: $disks_deviceName$ initializeParams: {sourceImage: $disks_initializeParams_sourceImage$} type: $disks_type$ machineType: $machineType$ networkInterfaces: - {network: $networkInterfaces_network$} zone: $zone$ type: compute.v1.instance
Here,
{sourceImage: $disks_initializeParams_sourceImage$}
and{network: $networkInterfaces_network$}
is getting likedictionary
. It means inner dictionary contents are not converting to yaml.I also tried,
output_data = eval(json.dumps(output_data)) ff = open('meta.yaml', 'w+') yaml.dump(output_data, ff, allow_unicode=True)
But getting same
yaml
file content.How can I convert complete dictinary to yaml in Python?
-
Maxim Suslov about 2 yearsFor Python 3.8+ and PyYAML 6.x, the following works
print(yaml.dump(document))