YAML:如何解释映射序列

时间:2017-10-18 16:09:47

标签: python yaml

YAML spec的第8页,作者提供了第4页"映射序列的示例"像这样:

product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00

为了我自己的理解,我(粗略地)如何在Python中表示?

映射>序列>制图,制图,制图......?

{"Product" : ({ "sku" : "BL394D" }, {"quantity" : 4 }), ... }

或映射>映射序列1,2,3,......?

{"Product" : ({ "sku" : "BL394D" }), ({ "quantity" : 4 }), ... )}

还是其他什么?

3 个答案:

答案 0 :(得分:1)

在JSON中看起来如此:

{
    "product": [
        {
            "sku": "BL394D",
            "quantity": 4,
            "description": "Basketball",
            "price": 450
        },
        {
            "sku": "BL4438H",
            "quantity": 1,
            "description": "Super Hoop",
            "price": 2392
        }
    ]
}

因此在Python中,它将是一个具有map的映射的对象,它是具有sku,quantity等属性的其他对象的数组。

答案 1 :(得分:1)

在YAML文档的根目录中有一个映射。这有一个键Dim rngCopy As Range, rngPaste As Range With ActiveSheet Set rngCopy = .Range(.Range("A2"), .Cells(2, Columns.Count).End(xlToLeft)) Set rngPaste = .Range(.Range("A2"), _ .Cells(Rows.Count, 1).End(xlUp)).Resize( , rngCopy.Columns.Count) End With rngCopy.Copy rngPaste.PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False 。它的值是一个序列,有两个项目(用短划线<DataGridTextColumn Header ="Value" Binding="{Binding Value, Converter={StaticResource decimalConverter}}" /> 表示)。

序列元素也是映射,每个映射的第一个键/值对与序列元素(其键为product)在同一行开始。

在Python中,默认情况下,映射作为-加载,序列作为sku加载,因此您可以使用以下命令在Python中定义数据:

dict

您当然可以加载数据结构,然后打印它以查看它是如何加载的。

答案 2 :(得分:0)

如果您正在寻找如何从yaml表示中获取Python对象,则可以使用yaml解析器。例如pyyaml

使用pip安装:pip install pyyaml

然后,例如:

>>> doc = """
    product:
         - sku         : BL394D
           quantity    : 4
           description : Basketball
           price       : 450.00
         - sku         : BL4438H
           quantity    : 1
           description : Super Hoop
           price       : 2392.00
     """

>>> yaml.load(doc)

{
    'product': [{
        'description': 'Basketball',
        'price': 450.0,
        'quantity': 4,
        'sku': 'BL394D'
    }, {
        'description': 'Super Hoop',
        'price': 2392.0,
        'quantity': 1,
        'sku': 'BL4438H'
    }]
}