【问题标题】:pyYaml - Export without "-"pyYaml - 不带“-”的导出
【发布时间】:2019-02-28 10:22:28
【问题描述】:

我需要用不带“-”的pyyaml将dict导出到yaml

    export_dash_dict = {}
    export_dash_dict["dashboards"] = []
    for dashboard in dashboards_to_export:
        single_dashboard = {}
        single_dashboard[dashboard.title] = {}
        single_dashboard[dashboard.title]["owner"]          = dashboard.owner.username
        single_dashboard[dashboard.title]["description"]    = dashboard.description
        export_dash_dict["dashboards"].append(single_dashboard)

    final_yaml = yaml.dump(export_dash_dict, default_flow_style=False,default_style=None)

这就是 pyyaml 导出我的字典的方式:

dashboards:
- Dashboard title 1:
    description: First
    owner: username1
- Dashboard title 2:
    description: Second
    owner: username2

使用在线解析,这是我得到的:

{
  "dashboards": [
    {
      "Dashboard title 1": {
        "owner": "username1", 
        "description": "First"
      }
    }, 
    {
      "Dashboard title 2": {
        "owner": "username2", 
        "description": "Second"
      }
    }
  ]
}

但我需要这样的东西:

dashboards:
 Dashboard title 1:
    description: First
    owner: username1
 Dashboard title 2:
    description: Second
    owner: username2

使用在线解析器:

{
  "dashboards": {
    "Dashboard title 2": {
      "owner": "username2", 
      "description": "Second"
    }, 
    "Dashboard title 1": {
      "owner": "username1", 
      "description": "First"
    }
  }
}

这样我在使用 yaml.load 时可以避免整个层级的数据

我正在使用:default_flow_style=False 参数,但我找不到避免“-”的方法 这是 YAML 的标准吗?

【问题讨论】:

  • 您不应该使用yaml.load(),它被记录为可能不安全。 onine 解析器没有显示你想要的输出列表,那么如果你不想要它们,为什么要首先在你的程序中创建它们呢?

标签: python yaml


【解决方案1】:

yaml 转储正在正确导出您的数据结构。你有一本字典 (export_dash_dict),它有一个键和一个值。一个键是dashboards,它的值是一个包含两个元素的列表。这两个元素是字典(我们不会在这里介绍其内容,但它们有两个键值对)。

您说要导出的数据结构不是具有一个键/值对且值是列表的字典,而是具有两个键值对的字典。第一个键是Dashboard title 1,它的值是一个字典(有两个键值对,我们不会在这里详述)。第二个键是Dashboard title 2,它的值是一个字典(同样,有两个我们不会详细说明的键值对)。

如果你想让yaml.dump写出这样的数据结构,你需要构造那个数据结构。

【讨论】:

  • 谢谢。这是构建字典的正确方法:export_dash_dict = {} export_dash_dict["dashboards"] = {} for dashboard in dashboards_to_export: export_dash_dict["dashboards"][dashboard.title] = {} export_dash_dict["dashboards"][dashboard.title]["owner"] = dashboard.owner.username export_dash_dict["dashboards"][dashboard.title]["description"] = dashboard.description final_yaml = yaml.dump(export_dash_dict, default_flow_style=False,default_style=None)
【解决方案2】:

感谢 torek,这是构建 dict 的正确方法:

    export_dash_dict = {}
    export_dash_dict["dashboards"] = {}
    for dashboard in dashboards_to_export:
        export_dash_dict["dashboards"][dashboard.title] = {}
        export_dash_dict["dashboards"][dashboard.title]["owner"]          = dashboard.owner.username
        export_dash_dict["dashboards"][dashboard.title]["description"]    = dashboard.description

    final_yaml = yaml.dump(export_dash_dict, default_flow_style=False,default_style=None)

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 2023-03-13
    • 2014-08-16
    • 1970-01-01
    • 2011-10-08
    • 2013-12-19
    • 2012-12-23
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多