簡體   English   中英

將嵌套列表轉換為字典

[英]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'

您的方法無效,因為當您壓縮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它們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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM