<p>塞林,非常感谢你的回答,它帮助我解决了我的问题。但我花了一段时间才明白答案,因为没有提到输入字典。所以,我要把@cerin的答案和输入字典一起发布。这里的输出显示为一个单独的条目。因此,这种方法很适合以预定义的顺序递归地将数据转储到yaml文件。</p>
<pre><code>import yaml
input_dict = {"first_key": "fist_value", "second_key": "second_value", "third_key": "third_value"}
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): # no need to preserve the order here
self.first_key = input_dict["first_key"]
self.second_key = input_dict["second_key"]
self.third_key = input_dict["third_key"]
def __getstate__(self): # this is where order should be defined
d = OrderedDict()
d['second_key'] = self.second_key
d['third_key'] = self.third_key
d['first_key'] = self.first_key
return d
dump_anydict_as_map(Document)
doc = Document('obj-20111227')
print(yaml.dump([doc], default_flow_style=False))
</code></pre>
<p>输出</p>
<pre><code>- second_key: second_value
third_key: third_value
first_key: fist_value
</code></pre>