2014-03-31 221 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))