2014-03-31 77 views
1

嗨,我試着從下面的嵌套列表中創建一個字典,並得到一個TypeError。請幫我修復它以獲得所需的輸出,如下所示。由於將嵌套列表轉換爲字典

n1 = [[1,2],[3,4]] 
n2 = [[(5,7),(10,22)],[(6,4),(8,11)]] 

output = {1:(5,7), 2:(10,22), 3:(6,4), 4:(8,11)} 

D1 = {} 
for key, value in zip(n1,n2): 
    D1[key] = value 
print D1 

TypeError: unhashable type: 'list' 

回答

4

你的方法沒有奏效,因爲當你壓縮n1n2,結果會是這樣

for key, value in zip(n1,n2): 
    print key, value 
# [1, 2] [(5, 7), (10, 22)] 
# [3, 4] [(6, 4), (8, 11)] 

所以,key是一個列表。但是,它不可排除。所以它不能用作字典的實際關鍵。

您可以鏈嵌套列表,讓他們壓扁,然後你可以用izip

from itertools import chain, izip 
print dict(izip(chain.from_iterable(n1), chain.from_iterable(n2))) 
# {1: (5, 7), 2: (10, 22), 3: (6, 4), 4: (8, 11)} 

這種方法的優點是一起zip他們說,這將是非常高效存儲,因爲它不創建任何中間列表。所以,即使實際列表非常大,也可以使用它。

2

也許不是最Python的方式,但它的短:

In [8]: dict(zip(sum(n1, []), sum(n2, []))) 
Out[8]: {1: (5, 7), 2: (10, 22), 3: (6, 4), 4: (8, 11)} 

sum()招,用於平整列表。

2

試試這個:

from itertools import chain 
n1 = [[1,2],[3,4]] 
n2 = [[(5,7),(10,22)],[(6,4),(8,11)]] 
print dict(zip(chain(*n1), chain(*n2))