2013-09-21 50 views
1

我使用pyyaml,我加載file.yml蟒蛇,發電機迭代與一個或多個項目

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

結果現在包含一個生成器對象。

然後,我嘗試處理:

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

如果我在file.yml有一個以上的「YAML元素」,這工作正常。例如:

富:酒吧

你好:世界

但是,如果我有一個只有一個我file.yml 「YAML元素」,這是行不通的。例如:

富:酒吧

的錯誤是:ValueError: need more than 1 value to unpack

我使用的Python 3

我怎樣才能解決這個問題? file.yml可以包含1個或多個元素。

回答

2

results是字典的,所以不是遍歷該列表,你想在字典是迭代:

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

所以,你試圖分配關鍵一個詞典,和值到另一個,因爲你是從列表中解壓縮而不是字典。 dict.items()返回元組列表,其中第一個位置的鍵和第二個元組中的值相同。

+0

爲什麼?我總是有一本字典:S – fj123x

+0

@ fj123x那麼爲什麼會引發ValueError? – TerryA

+0

我不知道,看到file.yml的例子,我總是把鍵:值的數據放在我的yml中,但是當生成器只有1個元素時,ValueError正在升高(當超過1個元素時不會發生) – fj123x

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