我花了几个小时来研究PyYAML文档和票证,但最终发现了此注释,它提出了一些概念验证代码,用于将OrderedDict序列化为常规YAML映射(但保持顺序)。
例如,将其应用于我的原始代码,解决方案如下所示:
>>> import yaml>>> from collections import OrderedDict>>> def dump_anydict_as_map(anydict):... yaml.add_representer(anydict, _represent_dictorder)... >>> def _represent_dictorder( self, data):... if isinstance(data, document):... return self.represent_mapping('tag:yaml.org,2002:map', data.__getstate__().items())... else:... return self.represent_mapping('tag:yaml.org,2002:map', data.items())... >>> class document(object):... def __init__(self, name):... self.name = name... self.otherstuff = 'blah'... def __getstate__(self):... d = OrderedDict()... d['name'] = self.name... d['otherstuff'] = self.otherstuff... return d... >>> dump_anydict_as_map(document)>>> doc = document('obj-20111227')>>> print yaml.dump(doc, indent=4)!!python/object:__main__.documentname: obj-20111227otherstuff: blah


