Прежде всего, спецификация YAML (как старая версия 1.1, на которой основан PyYAML, так и более новая спецификация 1.2 (2009)) указывают на то, что ключи отображений неупорядочены.Таким образом, вы не должны полагаться на порядок, который будет там после загрузки.
Тогда под капотом, конечно, есть разница, что Диконы Python 3.6 упорядочены (в реализации CPython, вв других реализациях это начинается с 3.7), тогда как предыстории до Python 3.6 не упорядочены.PyYAML создает dict и заполняет его в порядке чтения ключей из документа YAML, поэтому версия 3.6.5 получает порядок вставки ключа, а 3.4.8 - нет.
Если вынужно, чтобы поведение было одинаковым для обеих версий, я предлагаю вам отсортировать ключи явно:
for function in sort(conf['functions']):
, если вам действительно нужно получить ключи в том порядке, в котором они находятся в документе YAML, я предлагаю вам воспользоватьсяпосмотрите на ruamel.yaml (отказ от ответственности: я являюсь автором этого пакета, совместимого с YAML 1.2) и сделайте.Например:
import pathlib
import ruamel.yaml
yaml = ruamel.yaml.YAML()
file_name = pathlib.Path('myfile.yaml')
conf = yaml.load(file_name)
for function in conf['functions']:
print(function)
, который даст вам вывод в Python с 2.7 по 3.7, как в Python 3.6.5.(в ruamel.yaml выполнение yaml.load()
по умолчанию безопасно).