在 Python 中解析 yaml 列表和字典

Parsing yaml list and dicts in Python

如何使用 Python3 和 pyyaml 完成以下操作?

Yaml:

role-templates:
- readonly:
  - step1;
  - step2;
- readwrite:
  - step1;
  - step2
  - step3;

给定一个角色(只读或读写),我需要一个步骤列表。

这不起作用,因为我有一个列表而不是字典。

with open('dbconfig.yaml') as f:
    baseConfig = yaml.safe_load(f)

roleType = 'readonly'
roleSteps = baseConfig['role-templates'][roleType]

以上代码无法索引到角色模板。

或者,我开始沿着这条路线前进:

roleType = 'readonly'
roleSteps =  first_true(roleTemplates, None, lambda x: x == roleType)

如何提取给定角色的步骤?

如果你没有办法更改YAML文件,必须在加载后处理:

d = yaml.safe_load(io.StringIO("""role-templates:
- readonly:
  - step1;
  - step2;
- readwrite:
  - step1;
  - step2
  - step3;
"""))

d['role-templates'] = {k: v for d in d['role-templates'] for k, v in d.items()}

如果您是该 YAML 定义的唯一用户,请更改它:

d = yaml.safe_load(io.StringIO("""role-templates:
 readonly:
  - step1;
  - step2;
 readwrite:
  - step1;
  - step2
  - step3;
"""))

在任何一种情况下,d['role-templates'] 的结果内容都是正确的 dict,您可以得到例如:

>>> d['role-templates'].get('readonly')
['step1;', 'step2;']