我有一个嵌套的dictionary类,它的实例需要转储到YAML中
class NestedDict(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
倾倒这本词典时:
^{pr2}$我得到了这个错误(只有发布的整个消息对象的摘录):
"RepresenterError: cannot represent an object: {'a1401': 'ts755', 'ts64': {'topic': {'a1561': 'Process Control'}}, 'a1450': 'ts107', 'a1609': 'ts341', 'a1400': 'ts753', ......
那么,如何在YAML中巧妙地表达这一点呢?我读到PyYAML确实支持嵌套递归结构。在
YAML支持嵌套递归结构:
将为您提供一个锚(
^{pr2}$&id001
)和一个引用(*id001
)的YAML:你的一个
dict
的简单导数可以被转储,至少对ruamel.yaml也没有问题¹:这将为您提供:
如果你需要一个更复杂的表示,例如过滤掉一些 dict值,你必须告诉拉梅尔亚姆勒如何表示对象。 要告诉它NestedDict有一个representer,您可以使它成为};或者可以提供一个显式的representer。在
ruamel.yaml.YAMLObject
的子类,提供一个类属性yaml_tag = "!NestedDict"
并实现{后者是内部使用的,IMO更容易实现,因为您可以通过让字典代码返回对象的字典表示(即顶级键-值对)来装载字典代码。在
其中
xyz
是对象的一些键值对表示。在¹免责声明:我是该包的作者,它是PyYAML的增强版。
相关问题 更多 >
编程相关推荐