在 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;']
如何使用 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;']