我正在做一个简单的 yaml 加载并遇到一个小问题:
代码:
with open(target, 'r') as stream:
try:
data = (yaml.load(stream))
except Exception as exc:
print (exc)
print(data)
第一个 yaml 文件:
test:
- foo: 1
- bar: 2
test2:
- foo: 1
- bar: 2
第二个 yaml 文件:
foo: 1
bar: 2
我只需要测试组中的值,所以当我尝试从第一个 yaml 访问数据时,我使用 print(data['test'])
返回这些值:
[{'foo': '1'}, {'bar': '2'}]
在第二个上,我使用 print(data)
行,我得到:
{'foo': '1'}, {'bar': '2'}
我知道有几种方法可以解决这个问题,将括号替换为空或使用迭代循环创建一个新对象,但这看起来真的很复杂。有没有更好的方法来获得我正在寻找的结果,而无需跳过障碍并创建更难阅读的代码?
最佳答案
还有一个办法。基于 yaml 文件语法。在您的 yaml 文件中改用此格式。
test:
foo: 1
bar: 2
test2:
- foo: 1
- bar: 2
有了这个,你可以调用你的 foo 测试字典。
>>>print(data[test][foo])
1
这是因为 yaml 将“-”读取为列表元素,而没有“-”的元素将读取为字典元素。
关于python-3.x - 加载 yaml 列表作为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47314588/