我用YAML与PyYAML。 有没有办法来避免倾倒嵌套结构后的* id002参考? 为了提高可读性,我想看到实际的(元组)值存在。
虽然试图制造我注意到,当我使用同一ID的对象,它只是发生在一个小例子:
import yaml
t = ("b", "c")
x = {(1, t):1, (2, t):2, }
print(yaml.dump(x))
因此,我认为copy.copy()
可以解决这个问题,但是对于元组似乎并没有工作:(我可以创建一个不同的ID一个新的记录?
我用YAML与PyYAML。 有没有办法来避免倾倒嵌套结构后的* id002参考? 为了提高可读性,我想看到实际的(元组)值存在。
虽然试图制造我注意到,当我使用同一ID的对象,它只是发生在一个小例子:
import yaml
t = ("b", "c")
x = {(1, t):1, (2, t):2, }
print(yaml.dump(x))
因此,我认为copy.copy()
可以解决这个问题,但是对于元组似乎并没有工作:(我可以创建一个不同的ID一个新的记录?
所述PyYAML自卸使用一个ignore_aliases
方法来防止原语类型由被“锚定”和“参考”,在这种方式。 您可以覆盖该方法总是ignore_aliases独立的,默认情况下通过的任何物体。 yaml.Loader
类中使用yaml.load
¹:
t = ("b", "c")
x = {(1, t):1, (2, t):2, }
yaml.Dumper.ignore_aliases = lambda *args : True
yaml.dump(x, sys.stdout)
将让你:
? !!python/tuple
- 1
- !!python/tuple [b, c]
: 1
? !!python/tuple
- 2
- !!python/tuple [b, c]
: 2
你不必这样去尝试你最好的,并得到元组具有相同散列看起来不同。 你可能想提供default_flow_style
的参数yaml.load
到False
或True
让输出的不同布局。
你不能得到这个工作的原因是,该申述的结果一致id()
这是产生同样的两元组分别只要要素是相同的。
¹ 我只试过这种ruamel.yaml ,其中我的作者,这是PyYAML的增强版本,但对于这个都应该工作一样。