2016-08-20 95 views
-6

我有一個列表類似下面,想轉換爲快譯通它與dictPython的轉換列表多個鍵值

my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6'] 

我怎麼能轉換上面所列內容與dict類似下面

my_dict = { 
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': ['value3-1', 'value3-2', 'value3-3'], 
    'key4': 'value4', 
    'key5': ['value5', 'value5-1', 'value5-2'], 
    'key6': 'value6' 
} 
+4

看起來您希望我們爲您編寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。展示這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ](http://stackoverflow.com/tour)和[如何提問](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3

+0

我試圖解決它,但不斷收到IndexError。 –

+0

混合類型,使用所有值的列表是一個糟糕的主意。 –

回答

2

幾種方法可以做到這一點,這是一個: 編輯:我的第一個解決方案給了一個列表,每個值,但你只需要一個清單時,有一個鍵有多個值。

my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6'] 

my_dict = {} 
current_key = None 
for item in my_list: 
    if '=' in item: 
     current_key, value = item.split('=') 
     # This puts a string as the value 
     my_dict[current_key] = value 
    else: 
     # Check if the value is already a list 
     if not isinstance(my_dict[current_key], list): 
      # If value is not a list, create one 
      my_dict[current_key] = [my_dict[current_key]] 

     my_dict[current_key].append(item) 

import pprint 
pprint.pprint(my_dict) 

給出:

{'key1': 'value1', 
'key2': 'value2', 
'key3': ['value3-1', 'value3-2', 'value3-3'], 
'key4': 'value4', 
'key5': ['value5', 'value5-1', 'value5-2'], 
'key6': 'value6'} 

您可能希望使其更加堅固通過檢查current_keyNone。我會把它留給你。

+0

@cdrake謝謝你。在我的情景中工作就像一個魅力 –

2

這裏是一個可能的解決方案:

from collections import defaultdict 
import pprint 

my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 
      'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6'] 

my_dict = defaultdict(list) 
current_key = None 

for item in my_list: 
    if '=' in item: 
     current_key, value = item.split('=') 

    my_dict[current_key].append(value) 

my_dict = {k: v[0] if len(v) == 1 else v for k, v in my_dict.iteritems()} 

pprint.pprint(my_dict) 

出於好奇,如果你的輸入是一本字典,得到一個列表會平凡:

from collections import defaultdict 

my_dict = { 
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': ['value3-1', 'value3-2', 'value3-3'], 
    'key4': 'value4', 
    'key5': ['value5', 'value5-1', 'value5-2'], 
    'key6': 'value6' 
} 

output = ["{0}={1}".format(k, ', '.join(v) if type(v) is list else v) 
      for k, v in my_dict.iteritems()] 
print output 
+1

好的嘗試。但我認爲你完成了反向操作:) –

+1

列表中的'dict'預計爲 – Ejaz

+1

@RahulKP Lol,沒錯,我甚至沒有讀過這個問題,只是看到了一些數據,我不知道哪一個被輸入或輸出。我解決了這兩種情況:') – BPL