当前位置: 首页 > 面试题库 >

避免在PyYAML中引用

郭辉
2023-03-14
问题内容

我将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方法来防止原始类型以这种方式“锚定”和“引用”。您可以重写该方法,以始终忽略传入的任何对象而忽略_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.loadFalseTrue得到输出的不同布局。

您无法使之起作用的原因是,表示符与的结果匹配,id()并且对于两个单独生成的元组,只要元素相同,则表示相同。

¹我只是使用ruamel.yaml尝试了这一点,我是作者ruamel.yaml,它是PyYAML的增强版本,但是对于这两者来说,它们应该相同。



 类似资料:
  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

  • 我正在尝试根据我的边2[]数组中的对象编写一个新文档。现在不幸的是,这个数组中的一些索引为空,当它击中其中一个时,它只是给了我一个NullPointerExc的。这个数组有10个索引,但在这种情况下并不需要所有的索引。我已经尝试了try的捕捉语句,希望在它遇到空值后继续,但它仍然停止执行,并且不写新文档。作为对象一部分的堆栈(sire)包含我想打印出来的数据。 这是我的代码:

  • 我有一个用Grails 2.3.8编写的大项目。有时,当我使用我的CI部署它时,我收到以下消息: 由于StackOverflow Error,无法完成Web应用程序[/ProjectName##1152]的注释扫描。 可能的根本原因包括 -Xss 设置过低和非法的循环继承依赖关系。正在处理的类层次结构是 [org.bouncycastle.asn1.ASN1EncodableVector- 我已经

  • 问题内容: 我有以下(也许是常见的)问题,此刻绝对使我感到困惑: 有几个生成的事件对象扩展了抽象类,我想将它们划分为Session Bean,例如 但是将来可能会有两种以上的事件类型,因此if- else将会很长,甚至可能无法读取。另外,在这种情况下,我认为这并不是真正的“最佳实践”。 我可以在类型中添加一个抽象方法,并让它们自行划分,但随后我必须在每个实体中注入特定的Session Bean。

  • 问题内容: 具有“ instanceof”操作链被认为是“代码异味”。标准答案是“使用多态性”。在这种情况下我该怎么办? 基类有许多子类。他们都不在我的控制之下。类似的情况是Java类Integer,Double,BigDecimal等。 我确实可以控制等。 我不想使用几行代码就能完成的代码。(有时,我制作了一个HashMap将映射到的实例,将映射到的实例,等等。但是今天我想要一些更简单的方法。)

  • 假定你需要写一个函数,它使用name这样一个参数,打印当前日期和具体时间到日志中,然后将name加入到一个全局数据结构中。你可能写出来这样的代码: std::multiset<std::string> names; // global data structure void logAndAdd(const std::string& name) { auto now = std::chro

  • 但是这两种方法都不起作用(第一种方法导致ParseeRoreXception,第二种方法在传递给方法的值中产生双反斜杠)。

  • 问题内容: 我有以下内容: 但是,并非总是有一个结果会给我以下错误: NoSuchElementException:没有值 那么,如果没有值,我该如何返回? 问题答案: 您可以使用,它比检查要简单得多: