2016-09-21 58 views
1

我有一個yaml文件,有幾個字段是列表。如何在Python 3中統一轉換字典列表值?

它看起來有點像這樣:

key0: "value0" 
key1: ["value1-0", "value1-1", "value1-2"] 
key2: ["value2-0", "value2-1", "value2-2"] 
key3: "value3" 

這是自然轉化爲與PyYAML庫Python字典。

最後,我想一起搗爛鍵和值的字符串如下:

--key0 value0 --key1 value1-0 --key1 value1-1 --key1 value1-2 ... --key3 value3

我想出了一個解決方案,它依賴於我處理名單,但一些事實錯誤地讓我想知道是否有更乾淨,通用和優雅的方式?

UPD:@senchuk答案後,我希望讓自己多一點清楚。

這個問題不是關於任何解決方案。對於那些比Python更有經驗的人來說,這僅僅是一個基於觀點的問題。我經常聽到這種「pythonic」的方式。這是我正在尋找的!有時髦功能的東西可以做。對數據轉換沒有任何限制。如果最好的方法是將所有標量值轉換爲列表,然後將所有內容都轉換爲字符串,那就這樣做。我很好奇現在的Python如何做到這一點。

+0

什麼都嘗試過喲?請與我們分享您的代碼或您所做的任何嘗試 –

+0

我做了與@senchuk的解決方案非常相似的內容。我在這裏問一個經驗豐富的Python開發人員會選擇的方式。 – staroselskii

回答

0

你可以通過字典迭代建立一個字符串的內容。如果該項目是一個列表,則必須遍歷其元素。

注:由於字典是無序集合,因此輸出可能會有所不同。

dict={"key0": "value0", "key1": ["value1-0", "value1-1", "value1-2"], "key2": ["value2-0", "value2-1", "value2-2"], "key3": "value3"} 

s = '' 
for k,v in dict.items(): 
    print(k, v) 
    if type(v) is list: 
     for elem in v: 
      s+= '--' + k + ' ' + str(elem) + ' ' 
    else: 
     s+= '--' + k + ' ' + str(v) + ' ' 

print(s) 

>>> --key1 value1-0 --key1 value1-1 --key1 value1-2 --key0 value0 --key3 value3 --key2 value2-0 --key2 value2-1 --key2 value2-2 
+0

這與我寫的代碼幾乎沒有什麼不同。我在想更多的「pythonic」。這個'''''''東西讓我煩惱。因此,這個問題實際上是。 – staroselskii

+0

我將其標記爲答案,因爲不幸我還沒有想出更好的方法。 – staroselskii

0

如果你已經擁有的東西,轉換你有什麼成一個字典,那麼這應該做你想要

d = {'key1' : 'value1', 'key2' : 'value2'} 
stringFinal = '' 
tempString = '' 
for k, v in d.items(): 
    tempString = str(k) + ' ' + str(v) 
    stringFinal ='--' + tempString + ' ' + stringFinal 
    tempString = '' 
print(stringFinal) 
+0

對不起,但這不起作用!看看@chenchuk的答案。雖然他/她的回答並不完全是我要找的,但它的工作原理。 – staroselskii

+0

對不起!我沒有意識到你的字典中有值列表,我以爲你只是處理字符串值。是chenchuks解決方案的作品,你可以更具體,因爲你的意思pythonic?如更高效??我很感謝你的迴應! – BLang

+0

沒關係!我在想列表解析,itertools等等。我並不是想通常過分複雜。但是當我輸入'''的時候,如果type(v)是list'''我想沒關係,還有另一個更清晰的解決方案。通常我會找到一個自己,但是這次我嘗試了一個小時而無濟於事。我提出的所有解決方案都在減輕我處理列表的事實。 – staroselskii