我有一个YAML文件,如下所示:
a:
b: 1
a:
b: 2
c: 1
a:
b: 3
我想读取此文件,并对b
和c
做一些事情。问题是我无法使用yaml.load()
将此文件作为字典读取,因为它只会给我{'a':{'b': 3 }}
。相反,我想将其作为字典列表阅读,即,我希望输出为:
[
{'a':{'b': 1 }},
{'a':{'b': 2, 'c': 1 }},
{'a':{'b': 3 }}
]
我该如何实现?谢谢...
答案 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
}
]
}