【问题标题】:YAML and tuples as dict keyYAML 和元组作为字典键
【发布时间】:2014-02-18 23:04:14
【问题描述】:

d = {3: u'blah', u'b': u'foo', (12,2,3) : u'bonjour'}

做一本字典。如果我使用

g = yaml.dump(d)
h = yaml.load(g)
print g, h

非常好,但我到处都有很多!!python/unicode,所以这不利于可读性。

另一方面,如果我使用:

g = yaml.safe_dump(d)
h = yaml.load(g)
print g, h

不再有!!python/unicode,但也不再有!!python/tuple,所以load 不起作用,因为元组没有被正确理解。

如何在 YAML 中取得平衡?

  • 到处都没有!!python/unicode
  • 将元组作为字典键工作! (所以可能!!python/typle 必须保留)

【问题讨论】:

  • 我认为您需要与 PyYAML 开发人员交谈。

标签: python dictionary yaml dump python-2.x


【解决方案1】:

如果您搜索python yaml unicode,第一个结果是this bug report,这正是您正在寻找的解决方案。简而言之,为 unicode 字符串注册一个自定义 representer,如下所示:

yaml.add_representer(unicode, 
                     lambda dumper, value: dumper.represent_scalar(u'tag:yaml.org,2002:str', value))

有了这个,您的示例呈现如下:

>>> d = {3: u'blah', u'b': u'foo', (12,2,3) : u'bonjour'}
>>> print yaml.dump(d)
3: blah
? !!python/tuple [12, 2, 3]
: bonjour
b: foo

【讨论】:

  • 感谢@larsks,这正是我想要的!顺便问一下,有没有类似的方法将标签!!python/tuple重命名为tuple
  • 可能吗?我从未尝试过编写自定义构造函数。您需要花一些时间阅读 representers and constructors 上的 PyYAML 文档。
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 2019-03-28
  • 1970-01-01
  • 2010-11-28
  • 2011-12-25
  • 2012-02-20
  • 2016-09-24
  • 2010-10-31
相关资源
最近更新 更多