2017-04-25 46 views
-1

我需要幫助我的代碼。Python:使用一個整數和一個字符串作爲鍵將嵌套列表轉換爲字典

我不得不作出這樣一個嵌套列表:

numbers = [[4, 1, 1, 2, 3, 2], [2, 7, 3, 2, 7, 4], [1, 7, 4, 3, 3, 2]] 

我也有字符串列表:

F = ["M", "O", "R", "V", "C", "P"] 

我要將列表轉換頻率在詞典中。 我的代碼是這樣的:

numb = dict(((i,f), numbers[i][f]) for i in range(len(numbers)) for f in range(len(numbers[0]))) 

這是結果:

{(0, 1): 1, (1, 2): 3, (2, 4): 3, (0, 0): 4, (2, 0): 1, (2, 2): 4, (1, 4): 7, (1, 1): 7, (1, 5): 4, (1, 3): 2, (0, 5): 2, (2, 1): 7, (2, 5): 2, (0, 4): 3, (1, 0): 2, (2, 3): 3, (0, 3): 2, (0, 2): 1} 

的問題是,我想使用的清單f串爲f在我的字典的關鍵。我想有:

{(0, "O"): 1, (1, "R"): 3, (2, "V"): 3, (0, "M"): 4, ... (0, "O"): 1} 

我試圖改變這樣的我的代碼:

numb = dict(((i,f), numbers[i][f]) for i in range(len(numbers)) for f in F) 

,但我得到的回報一個TypeError: list indices must be integers, not str

有沒有一種辦法可以解決呢?先謝謝你!

+0

我猜流浪括號。仔細查看錯誤消息,它會告訴你_where_語法錯誤被發現(但不是真正的錯誤所在)。 – alexis

+1

您在最後的代碼片段 –

+0

@KindStranger中有太多密切的偏見''''謝謝。我有正確的括號,但現在我獲得了另一種類型的錯誤 – killua

回答

1

這可能是你正在尋找:

numb = {(i,f): numbers[i][e] for i in range(len(numbers)) for e, f in enumerate(F)} 
+0

謝謝!很好的答案! – killua

+0

歡迎您:) – zipa

1

您在這裏有兩個問題,第一個是你已經用了太多的括號當你有替代的字符串列表(兩個額外的),所以你的語句結尾應該是:

for f in F) 

如果你這樣做,你會看到你鴕鳥政策有語法問題了,但你會看到,你仍然有你的索引的問題,因爲你正試圖使用​​一個字符串作爲索引。解決此問題的方法是使用索引方法返回您是從「F」

使用同時安裝了更正應在信函的位置:

numb = dict(((i,f), numbers[i][F.index(f)]) for i in range(len(numbers)) for f in F) 
+0

我編輯了這個問題,但感謝您的回答和解釋! – killua

相關問題