在序列化Python字典时,如何控制PyYaml输出键/值对的顺序?
我在Python脚本中使用Yaml作为简单的序列化格式。我的Yaml序列化对象代表一种“文档”,因此为了最大限度地方便用户,我希望对象的“名称”字段首先出现在文件中。当然,由于我的对象的__getstate__
返回的值是一个字典,而Python字典是无序的,“name”字段将被序列化到输出中的一个随机位置。
例如
>>> import yaml
>>> class Document(object):
... def __init__(self, name):
... self.name = name
... self.otherstuff = 'blah'
... def __getstate__(self):
... return self.__dict__.copy()
...
>>> doc = Document('obj-20111227')
>>> print yaml.dump(doc, indent=4)
!!python/object:__main__.Document
otherstuff: blah
name: obj-20111227
我花了几个小时研究PyYAML文档和票据,但我最终发现了this comment,它列出了一些概念验证代码,用于将OrderedDict序列化为普通YAML映射(但维护顺序)。
例如,应用于我的原始代码,解决方案如下:
上次我查的时候,Python的字典没有订。如果您真的希望这样做,我强烈建议使用键/值对列表。
或者,用键定义一个列表并将它们按正确的顺序排列。
塞林,非常感谢你的回答,它帮助我解决了我的问题。但我花了一段时间才明白答案,因为没有提到输入字典。所以,我要把@cerin的答案和输入字典一起发布。这里的输出显示为一个单独的条目。因此,这种方法很适合以预定义的顺序递归地将数据转储到yaml文件。
输出
相关问题 更多 >
编程相关推荐