Python
YAML

PyYamlの出力時にreferenceの機能を無効にする方法

More than 1 year has passed since last update.

何も設定せずにyaml.dumpするとreferenceの機能が使われてしまう。不要な場合もある。

import yaml


person = {
    "name": "foo",
    "age": 20
}
d = [person, person]

print(yaml.dump(d))

例えば以下のような出力になる。

- &id001 {age: 20, name: foo}
- *id001

yaml.dumpにDumperオプションが渡せる。そしてここで渡すDumperクラスのignore_aliases()メソッドをTrueを返すようにしてあげれば良い。

class IgnoreReferenceDumper(yaml.Dumper):
    def ignore_aliases(self, data):
        return True

print(yaml.dump(d, Dumper=IgnoreReferenceDumper))

平和が訪れた。

- {age: 20, name: foo}
- {age: 20, name: foo}