Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can PyYAML dump dict items in non-alphabetical order?

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.

like image 517
mwcz Avatar asked May 28 '13 00:05

mwcz


1 Answers

If you upgrade PyYAML to 5.1 version, now, it supports dump without sorting the keys like this:

yaml.dump(data, sort_keys=False) 

As shown in help(yaml.Dumper), sort_keys defaults to True:

Dumper(stream, default_style=None, default_flow_style=False,   canonical=None, indent=None, width=None, allow_unicode=None,   line_break=None, encoding=None, explicit_start=None, explicit_end=None,   version=None, tags=None, sort_keys=True) 

(These are passed as kwargs to yaml.dump)

like image 150
Cooper.Wu Avatar answered Nov 08 '22 12:11

Cooper.Wu