嗨,我请尝试从下面的嵌套列表中创建一个字典,然后我得到一个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'
答案 0 :(得分:4)
您的方法不起作用,因为当您点击n1
和n2
时,结果将是这样的
for key, value in zip(n1,n2):
print key, value
# [1, 2] [(5, 7), (10, 22)]
# [3, 4] [(6, 4), (8, 11)]
所以,key
是一个列表。但是,它不耐用。所以它不能用作字典的实际键。
您可以链接嵌套列表以使其展平,然后您可以zip
与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)}
{{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))