YAML和元组作为dict键

时间:2014-02-18 23:04:14

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

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无处不在,
  • 将元组作为dict键工作! (所以可能必须保留!!python/typle

1 个答案:

答案 0 :(得分:1)

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

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