读取YAML文件作为列表

时间:2019-06-24 09:32:33

标签: python python-3.x yaml

我有一个YAML文件,如下所示:

a:
    b: 1    
a:
    b: 2    
    c: 1
a:
    b: 3

我想读取此文件,并对bc做一些事情。问题是我无法使用yaml.load()将此文件作为字典读取,因为它只会给我{'a':{'b': 3 }}。相反,我想将其作为字典列表阅读,即,我希望输出为:

[
    {'a':{'b': 1 }},
    {'a':{'b': 2, 'c': 1 }},
    {'a':{'b': 3 }}
]

我该如何实现?谢谢...

2 个答案:

答案 0 :(得分:1)

最新的YAML规范(2009年以来为1.2)非常明确,映射中的键不能重复:

  

映射节点的内容是一组无序的键:值节点对,但每个键都是唯一的。

根据提示,您的文件不是有效的YAML文件,加载该文件应会给您 DuplicateKeyError

既然您知道要获取什么,那么查看YAML这样加载的最简单方法就是转储数据结构:

import sys
import ruamel.yaml

yaml = ruamel.yaml.YAML()
data = [
    {'a':{'b': 1 }},
    {'a':{'b': 2, 'c': 1 }},
    {'a':{'b': 3 }}
]
yaml.dump(data, sys.stdout)

给出:

- a:
    b: 1
- a:
    b: 2
    c: 1
- a:
    b: 3

答案 1 :(得分:1)

使用以下代码段作为YAML

a:
    - b: 1    
    - b: 2    
      c: 1
    - b: 3

并在python中获取此字典(无需重复'a')

{
  "a": [
    {
      "b": 1
    }, 
    {
      "c": 1, 
      "b": 2
    }, 
    {
      "b": 3
    }
  ]
}