2014-12-26 82 views
1

不要與this question in Stackoverflow混淆。映射列表 - 列表作爲python中的字典

我有一個名爲列表a = [2, 3, 4, 1]

我有一些功能說FUNC(),主要內容如下:如下

def func(a): 
    o = [] 
    n = len(a) 
    for i in range(n): 
     x=a[:] 
     x[i],x[(i+1)%n] = x[(i+1)%n],x[i] 
     o.append(x) 
    return o 

和FUNC(一)產生另一個列表:

[[3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]] 

現在我想將輸出列表映射到它從中生成的列表。因此,如何生成以下格式的字典:

a   : o 

key   : value1, value2........last value 

[2, 3, 4, 1] : [3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2] 
+0

你就不能這樣做:'{元組(一):FUNC(一)}'? (小細節:你不能有一個'list'作爲關鍵字,所以我把它轉換成了一個'tuple')。真正的問題是你爲什麼要這樣做,因爲你擁有的只是一個包含一個元素的字典 - 你有多個「a」值? – Rufflewind

回答

2

字典中的鍵不能是可變類型。你可以有一個元組來代替。也就是說

(2, 3, 4, 1) : [3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2] 

這是可以做到

def func(a): 
    o = [] 
    n = len(a) 
    for i in range(n): 
     x=a[:] 
     x[i],x[(i+1)%n] = x[(i+1)%n],x[i] 
     o.append(x) 
    return {tuple(a):o} 

例如func([2,3,4,1])現在將返回

{(2, 3, 4, 1): [[3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]]} 

還要注意:根據documentation

唯一的類型價值不可接受作爲鍵是含有 列表或字典或其他可變的類型的值是由 值,而不是由對象標識相比,原因是所述 高效實現字典需要密鑰的散列值 保持恆定

發表評論編輯

您可以直接使用usin []表示法訪問密鑰。

E.g:

l = [2,3,4,1] 
a = func(l) 
print (a[tuple(l)]) 

這將打印值的列表。

,也可通過整個字典環

for i in a.items(): 
    for j in i: 
      print (j) 

這將打印

[3, 2, 4, 1] 
[2, 4, 3, 1] 
[2, 3, 1, 4] 
[1, 3, 4, 2] 
+0

那麼現在該如何編寫密鑰呢?在我們的案例中,關鍵是元組(o)。 Banagalorean幫助班加羅爾:D – Technopolice

+0

@Technopolice現在關鍵是'tuple(o)'。 *寫給鑰匙*的意思是什麼? –

+1

我想從新形成的字典中檢索密鑰。那麼如何檢索它?就像鍵,在such_dictionary中的值:打印鍵...會拋出一個錯誤 – Technopolice