I'm using yaml.dump
to output a dict. It prints out each item in alphabetical order based on the key.
>>> d = {"z":0,"y":0,"x":0}
>>> yaml.dump( d, default_flow_style=False )
'x: 0\ny: 0\nz: 0\n'
Is there a way to control the order of the key/value pairs?
In my particular use case, printing in reverse would (coincidentally) be good enough. For completeness though, I'm looking for an answer that shows how to control the order more precisely.
I've looked at using collections.OrderedDict
but PyYAML doesn't (seem to) support it. I've also looked at subclassing yaml.Dumper
, but I haven't been able to figure out if it has the ability to change item order.
One-liner to rule them all:
That's it. Finally. After all those years and hours, the mighty
represent_dict
has been defeated by giving it thedict.items()
instead of justdict
Here is how it works:
This is the relevant PyYaml source code:
To prevent the sorting we just need some
Iterable[Pair]
object that does not have.items()
.dict_items
is a perfect candidate for this.Here is how to do this without affecting the global state of the yaml module: