[英]Converting nested lists to dictionary
嗨,請嘗試從下面的嵌套列表中制作字典,然后出現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'
您的方法無效,因為當您壓縮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
是一個列表。 但是,它不可散列。 因此,它不能用作字典的實際鍵。
您可以將嵌套列表鏈接起來以使其扁平化,然后可以使用izip
它們zip
在一起
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)}
這種方法的優點在於,由於它不會創建任何中間列表,因此將具有很高的內存效率。 因此,即使實際列表很大,也可以使用它。
也許不是最Python的方式,但是很簡短:
In [8]: dict(zip(sum(n1, []), sum(n2, [])))
Out[8]: {1: (5, 7), 2: (10, 22), 3: (6, 4), 4: (8, 11)}
sum()
技巧用於使列表變平。
嘗試這個:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.