Итерация по списку YAML в python

Я пытаюсь прочитать файл YAML и распечатать список, который у меня есть там в порядке того, что находится в файле.

Итак, ЯМЛ:

b: ...
a: ...

И мой питон это:

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

Выход становится:

a
b

Однако мне нужно, чтобы это было b затем a, Я также пытался iteritems()и я получаю тот же результат.

2 ответа

Решение

Если ваш файл YAML содержит:

b: 2
a: 1

Затем разбор вот так:

from ruamel.yaml import YAML

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

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

распечатает b первый. Однако если вы используете (быстрее):

yaml = YAML(typ='safe')

это не гарантируется, так как порядок соответствия ключей не гарантируется спецификацией YAML.

Если вы используете YAML 1.1 и PyYAML, такой гарантии заказа нет, но тогда вам не следует использовать yaml.load() во-первых, потому что это небезопасно.

yaml.load в этом случае просто возвращает dict, который по умолчанию неупорядочен. Если вы заботитесь о сохранении заказа, вам необходимо использовать OrderedDict посмотрите здесь пример того, как это сделать.

Другие вопросы по тегам