将嵌套列表转换为字典

时间:2014-03-31 10:22:23

标签: python

嗨,我请尝试从下面的嵌套列表中创建一个字典,然后我得到一个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'

3 个答案:

答案 0 :(得分: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是一个列表。但是,它不耐用。所以它不能用作字典的实际键。

您可以链接嵌套列表以使其展平,然后您可以zipizip

一起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)}
{{1}}

这种方法的优点在于,它将非常节省内存,因为它不会创建任何中间列表。因此,即使实际列表非常大,也可以使用它。

答案 1 :(得分:2)

也许不是最狡猾的方式,但它很简短:

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

sum()技巧用于展平列表。

答案 2 :(得分: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))