如何迭代YAML文件以提供PYTHON中不同列表中项目的所有可能组合
我有一个YAML文档,序列如下如何迭代YAML文件以提供PYTHON中不同列表中项目的所有可能组合,python,yaml,combinations,pyyaml,parser-combinators,Python,Yaml,Combinations,Pyyaml,Parser Combinators,我有一个YAML文档,序列如下 --- One: - a - b - c Two: - d - e Three: - f - g - h - i 我需要从每个列表中获取所有可能的元素组合,一次一个,在列表中的每个实例中仅获取一个元素,并且必须使用所有列表 我需要做的是python 到目前为止,我可以使用以下方式打印YAML文件: #!/usr/bin/env python import yaml with open("parameters.yaml", 'r') as
---
One:
- a
- b
- c
Two:
- d
- e
Three:
- f
- g
- h
- i
我需要从每个列表中获取所有可能的元素组合,一次一个,在列表中的每个实例中仅获取一个元素,并且必须使用所有列表
我需要做的是python
到目前为止,我可以使用以下方式打印YAML文件:
#!/usr/bin/env python
import yaml
with open("parameters.yaml", 'r') as stream:
try:
print(yaml.load(stream))
except yaml.YAMLError as exc:
print(exc)
使用itertools的解决方案:
import itertools
import yaml
with open('parameters.yaml', 'r') as stream:
try:
inputdict = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
total_list = [inputdict[key] for key in inputdict]
combinations = list(itertools.product(*total_list))
print(combinations)
输出:
[('a', 'd', 'f'), ('a', 'd', 'g'), ('a', 'd', 'h'), ('a', 'd', 'i'), ('a', 'e', 'f'), ('a', 'e', 'g'), ('a', 'e', 'h'), ('a', 'e', 'i'), ('b', 'd', 'f'), ('b', 'd', 'g'), ('b', 'd', 'h'), ('b', 'd', 'i'), ('b', 'e', 'f'), ('b', 'e', 'g'), ('b', 'e', 'h'), ('b', 'e', 'i'), ('c', 'd', 'f'), ('c', 'd', 'g'), ('c', 'd', 'h'), ('c', 'd', 'i'), ('c', 'e', 'f'), ('c', 'e', 'g'), ('c', 'e', 'h'), ('c', 'e', 'i')]
这与YAML无关,从YAML加载映射和序列后,您将列表作为dict的值,这就是Python。您永远不应该使用已记录的不安全PyYAML
load()
,您没有理由不使用safe\u load()
@Anthon您能告诉我一个资源,在那里正确读取yaml,以及如何在读取yaml后循环值吗?唯一真正的文档(除了源代码)是。在那里搜索“不安全”可能的副本,如果我希望输出为(一:'a',二:'d',三:'f'),…等等。