Итерация по списку 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
посмотрите здесь пример того, как это сделать.