2012-11-15 47 views
0

我需要做一個字典,你可以參考[[1,2],[3,4]] - >([1,2]:0,[2,3]:0) 我試過了不同的方式,但我不能在字典中使用列表。所以我嘗試過使用元組,但它仍然是一樣的。任何幫助表示讚賞!如何在字典中使列表成爲關鍵值?

+0

如果你想使用列表作爲鍵,我認爲你的算法可能有錯誤的實現。 – Serdalis

+1

*所以我嘗試使用元組,但它仍然是相同的*請向我們展示您的代碼! –

+0

*你爲什麼要這樣做?*如果列表的內容不會改變,並且你想在你的代碼中使用內容作爲關鍵字,那麼將列表轉換爲元組並將其用作關鍵字正如其他人所建議的那樣。另一方面,如果您要更改列表的內容,但仍希望能夠將列表映射到字典中的相同值,請在列表中調用id()內置函數,然後使用那個結果作爲你的鑰匙。這是兩種截然不同的用例,您沒有給我們足夠的信息來確定哪種方法可以解決您的問題。 –

回答

4

您需要使用的元組:

dict.fromkeys((tuple(i) for i in [[1,2],[3,4]]), 0) 

或(對於python2.7 +)

{tuple(i): 0 for i in [[1,2], [3,4]]} 

編輯:

閱讀註釋,OP大概要算的出現列表:

>>> collections.Counter(tuple(i) for i in [[1,2], [1,2], [3,4]]) 
Counter({(1, 2): 2, (3, 4): 1}) 
+0

有沒有辦法改變0?就像,如果你有[[1,2],[1,2],[2,3]]的列表,我需要它返回[[1:2]:2,[2:3]:1] ? – user1828072

+0

@ user1828072當然,只需要寫'1'作爲最後一個參數而不是'0' – JBernardo

+0

並感謝您的快速響應! – user1828072

3

列表不能用作字典鍵,因爲它們不可散列(可能是因爲它們可能會發生變異,因此不可能提供合理的散列函數)。然而tuple不成問題:

d = {(1,2):0, (3,4):0} 

注意,在你的榜樣,你似乎在暗示你想構建一個字典是這樣的:

((1,2):0, (3,4):0) 

這是行不通的。你需要大括號來製作字典。

0

([1,2]:0, [2,3]:0)不是一本字典。我認爲你的意思是使用:{(1,2):0, (2,3):1}

+0

看起來我們在同一時間有同樣的想法 - 但是,你的第二個例子不會工作,因爲你使用列表作爲不會飛的鍵。 – mgilson

+0

對,它看起來像我們也注意到,在同一時間呢!我編輯它來反映。謝謝! –

相關問題