读取YAML文件作为列表

Ank*_*mar 6 python yaml python-3.x

我有一个YAML文件(仅作为示例):

a:
    b: 1    
a:
    b: 2    
    c: 1
a:
    b: 3
Run Code Online (Sandbox Code Playgroud)

我想读取此文件,并使用bs和cs 做一些事情。问题在于我不能使用字典来读取这个文件yaml.load(),因为它只会给我{'a':{'b': 3 }}。相反,我想将其作为字典列表来阅读,即,我希望输出为:

[
    {'a':{'b': 1 }},
    {'a':{'b': 2, 'c': 1 }},
    {'a':{'b': 3 }}
]
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*hon 2

最新的 YAML 规范(1.2,从 2009 年开始)非常明确地表明映射中的键不能重复:

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

如所呈现的,您的文件不是有效的 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)
Run Code Online (Sandbox Code Playgroud)

这使:

- a:
    b: 1
- a:
    b: 2
    c: 1
- a:
    b: 3
Run Code Online (Sandbox Code Playgroud)