Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterating through YAML list in python

I'm trying to read a YAML file and print out the list I have on there in order of what it is in the file.

So YAML:

b: ...
a: ...

And my python is:

for key, value in yaml.load(open(input_file)).items():
    print(str(key))

The output becomes:

a
b

However I need it to be b then a. I've also tried iteritems(), and I get the same result.

like image 616
Rikg09 Avatar asked Aug 04 '26 02:08

Rikg09


2 Answers

If your YAML file contains:

b: 2
a: 1

Then parsing like this:

from ruamel.yaml import YAML

yaml = YAML()
input_file = 'input.yaml'

for key, value in yaml.load(open(input_file)).items():
    print(str(key))

will print b first. If you however use the (faster):

yaml = YAML(typ='safe')

this is not guaranteed, as the order of mapping keys is not guaranteed by by the YAML specification.

If you are using YAML 1.1 and PyYAML, there is no such guarantee of order, but then you should not be using yaml.load() in the first place, because it is unsafe.

like image 177
Anthon Avatar answered Aug 05 '26 14:08

Anthon


yaml.load in this case just returns a dict, which by default is unordered. If you care about preserving order, you'd need to use an OrderedDict, see here for an example of how to do that.

like image 23
thaavik Avatar answered Aug 05 '26 14:08

thaavik



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!