2014-08-30 145 views
0

我有什麼似乎是一個棘手的問題,但可能很簡單的解決方案。在Python中嵌套的字典嵌套的列表

我有一個嵌套列表,我希望每個列表中包含的第一個值是字典中的鍵。我希望將該列表中包含的所有其他元素作爲值添加到該密鑰中。

這裏是嵌套列表的一個示例:

stations[[1, 'carnegie', 12345, 30],[2, 'london', 12344, 30], [4, 'berlin', 1345563, 30]] 

我想將其轉換爲一個字典的格式如下:

stations {1:['carnegie', 12345, 30], 2:['london', 12344, 30], 4:['berlin', 1345563, 30]} 

嵌套列表是相當大的,所以我我只作爲樣本在這裏:)

我目前的嘗試已經產生了最好的選擇爲:

newDict = dict.fromkeys(stations,{}) 

這給了我:

{1: {}, 2:{}, 4:{}} 

爲了這,我不知如何到兩個鍵和值相結合,使我的理想的字典。

對此的任何幫助將是偉大的。

編輯:

要增加,我希望能夠給一個變量名分配到字典與當前的解決方案提供如下:

{i[0] : i[1:] for i in stations} 

這給我正確的在一個循環的輸出,但是當我在循環變量賦值給它,它給了我最終的關鍵:值字典中的

newDict = {} 
for y in stations: 
    newDict = {y[0] : y[1:]} 

print newDict 

回報:

{4: ['berlin', 1345563, 30]} 

謝謝!

回答

2
>>> stations = [[1, 'carnegie', 12345, 30],[2, 'london', 12344, 30], [4, 'berlin', 1345563, 30]] 

您可以使用dict理解

>>> {i[0] : i[1:] for i in stations} 
{1: ['carnegie', 12345, 30], 2: ['london', 12344, 30], 4: ['berlin', 1345563, 30]} 
+0

在Python 3,你可以使用擴展的迭代解包語法,以避免指數和切片,如果你想:'{鍵:鍵值,*值在電臺}' – Blckknght 2014-08-30 15:50:02

+0

這是做這項工作。但是,當我試圖將該循環的結果分配給一個變量時,它只給出了最後一個鍵和它的元素。即:'print newDict'返回'{4:['berlin',1345563,30]}'有沒有辦法來解決這個問題? – 2014-08-30 15:58:21

+2

@BenW dict-comp已經*了* a *循環* - 你在循環中所做的一切就是不斷創建一個新的字典,每一個回合都有一個單獨的條目...拿cyber的代碼做:'newDict = {i [0]:我[1:]因爲我在電臺}' - 那裏亞去...全部完成... – 2014-08-30 16:13:34

0

使用dict理解:

{i[0]: i[1:] for i in stations}