【问题标题】:Pyyaml dump does not produce anchors for the same objectsPyyaml 转储不会为相同的对象生成锚点
【发布时间】:2023-01-11 07:13:36
【问题描述】:

我正在对 PyYaml 进行一些试验,我想引用之前出现在 yaml 中的值。举个例子:

import pyyaml
a=25
dict_to_dump={'a':a,'b':a}
pyyaml.dump(dict_to_dump)

根据我从 pyyaml 规范中了解到的情况,应该为每个已经遇到的对象添加一个锚点。就我而言,我希望在 yaml 文件中包含:

a:&id 25
b:*id

因为传递的对象完全相同,但我发现:

a:25
b:25

我怎样才能获得所需的行为?

【问题讨论】:

  • 首先,您如何成功导入pyyaml?那么它转储的正是你的字典中的内容,pyyaml 文档的哪一部分让你认为你会得到引用和锚点?

标签: python yaml pyyaml


【解决方案1】:

25 不是对象*。尝试使用列表或字典,它会像您期望的那样工作:

import yaml

a = 25
dict_to_dump = {'a':a,'b':a}
print(yaml.dump(dict_to_dump))
# a: 25
# b: 25

a = 'string'
dict_to_dump = {'a':a,'b':a}
print(yaml.dump(dict_to_dump))
# a: string
# b: string

a = [1, 2, 3]
dict_to_dump = {'a':a,'b':a}
print(yaml.dump(dict_to_dump))
# a: &id001
# - 1
# - 2
# - 3
# b: *id001

* 好的,一切是 Python 中的一个对象。在这种情况下,“对象”指的是一个 JSON/YAML 对象,因此是一个列表或字典。

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 2017-06-13
    • 2012-01-04
    • 1970-01-01
    • 2011-01-27
    • 2012-05-25
    • 2021-04-17
    • 2014-01-15
    相关资源
    最近更新 更多