python,生成器迭代一个或多个项目

时间:2013-09-21 11:25:12

标签: python loops yaml generator

我正在使用pyyaml,我正在加载file.yml

stream = open("file.yml", "r")
results = yaml.load_all(stream)

结果现在包含一个生成器对象。

然后,我正在尝试处理这个问题:

for key, value in results:
    print(key, "->", value)

如果我的file.yml中有多个“yaml元素”,这样可以正常工作。例如:

  

foo:bar

     

你好:世界

但是,如果我的file.yml中只有一个“yaml元素”,则无效。例如:

  

foo:bar

错误是:ValueError: need more than 1 value to unpack

我正在使用python 3

我该如何解决这个问题? file.yml可以包含1个或多个元素。

2 个答案:

答案 0 :(得分:2)

results是一个字典列表,所以不要迭代它,而是要迭代字典:

for dictionary in results:
    for key, value in dictionary.items():
        print(key, "->", value)

所以你试图将键分配给一个字典,并将值赋给另一个字典,因为你是从列表中解包而不是字典。 dict.items()返回一个元组列表,其中第一个位置的键和元组另一个中的值。

答案 1 :(得分:1)

results = yaml.load_all(stream)
for doc in results:
    for k, v in doc.items():
        print(k, "->", v)