2016-09-15 131 views
-3

我有一個Python列表如下圖所示:如何使用列表中的多個值創建一個Python字典?

['Phylum_C3.30', 'CDgu97FdFT6pyfQWZmquhFtiKrL1yp', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT', 'Family_E3.30', 'iKUmlH47RuphW3NbqXykn0ayizhztF', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG', 'Class_C2.60', 'D0RRB3F0dCl39KuEZNqfdD8q9jKzUu', 'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH_legend', 'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH'] 

我希望有一本字典,其中鍵會以「Pylum」或「類」或「訂單」或「家庭」或「屬開頭的元素'和值將跟隨該元素的所有值,直到下一個元素具有'Pylum'或'Class'或'Order'或'Family'或'Genus'。

對於如:

最終的詞典看起來像:

{ 
    "Phylum_C3.30": [ 
     'CDgu97FdFT6pyfQWZmquhFtiKrL1yp', 
     'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 
     'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT' 
    ], 
    "Family_E3.30": [ 
     'iKUmlH47RuphW3NbqXykn0ayizhztF', 
     'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend', 
     'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG' 
    ], 
    "Class_C2.60": [ 
     'D0RRB3F0dCl39KuEZNqfdD8q9jKzUu', 
     'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH_legend', 
     'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH' 
    ], 
} 
+1

您的預期輸出是無效的Python。你是否想創建一個帶有* lists *的字典作爲值?你有沒有嘗試過自己呢? –

回答

2

簡單地遍歷列表,如果值測試,密鑰存儲,作爲最「近」鍵看出,併爲該密鑰的字典添加一個列表。那麼對於所有其他非關鍵值添加到相關聯的列表中最後一個見過鍵:

prefixes = ('Pylum', 'Class', 'Order', 'Family', 'Genus') 
output = {} 
current_key = None 
for elem in inputlist: 
    if any(elem.startswith(p) for p in prefixes): 
     # this is a key, add it to the output 
     current_key = elem 
     if current_key not in output: 
      output[current_key] = [] 
    else: 
     output[current_key].append(elem) 

你可以調整的關鍵是處理一點的方式;刪除if current_key not in output會導致重複的條目覆蓋以前的條目。或者如果重複的條目應該是一個錯誤,您可以提出if current_key in output案例的例外情況。

+0

對我很好。我唯一的建議是在第一個元素不是有效密鑰的情況下檢查'current_key'是否仍然是'None',但如果您信任輸入,則可能會放棄這一點。它只會產生一個帶有「None」鍵的字典,而不是一個大問題。 –

+0

@CurtisLusmore:因爲沒有一個關鍵字作爲第一個元素會是一個錯誤,沒有檢查給我們一個免費的例外情況。它將*不*導致以'None'作爲關鍵字的字典;你會得到一個'KeyError' –

相關問題