簡體   English   中英

將嵌套的列表列表轉換成字典

[英]Convert nested list of lists into a dictionary

我有一個列表數組,需要將其變成字典,其中每個列表中的第一個元素是鍵,其余元素是與該鍵對應的值。

例如,數組:

 a=[[[1, 2, 4] [2, 1, 3, 5] [3, 2, 6]]
   [[4, 1, 5, 7] [5, 2, 4, 6, 8] [6, 3, 5, 9]]]

應該看起來像:

 dict = {1:[2,4], 2:[1,3,5], 3:[2,6], 4:[1,5,7], 5:[2,4,6,8], 6:[3,5,9]}

盡管該對象看起來像一個列表列表,但實際上是通過此過程創建的數組:

 a = [[i] for i in range(1, 10)]
     swap = a[0]
     a[0] = None
     b = np.array(a)
     b[0] = swap
     b.shape = 3, 3

然后,我遍歷數組並將數字附加到不同的列表元素,這就是列表已擴展的原因。 讓我知道是否不清楚!

有沒有一種簡單的方法可以遍歷數組並創建數組? 謝謝!

您可以將嵌套的dict理解與擴展的可迭代解壓縮結合使用

>>> l = [[[1, 2, 4], [2, 1, 3, 5], [3, 2, 6]], [[4, 1, 5, 7], [5, 2, 4, 6, 8], [6, 3, 5, 9]]]
>>> {k: v for sub_l in l for k, *v in sub_l}
{1: [2, 4], 2: [1, 3, 5], 3: [2, 6], 4: [1, 5, 7], 5: [2, 4, 6, 8], 6: [3, 5, 9]}

使用生成器展平列表,

a=[
     [[1, 2, 4], [2, 1, 3, 5], [3, 2, 6], ],
     [[4, 1, 5, 7], [5, 2, 4, 6, 8], [6, 3, 5, 9]],

   ]

def flat(a):
    for level1 in a:
        for level2 in level1:
            yield level2

result = {}
for l in flat(a):
    result[l[0]] = l[1:]

print result

這是另一個使用itertools.chain()基於@niemmi答案的解決方案,可能更具可讀性:

>>> import itertools
>>> l = [[[1, 2, 4], [2, 1, 3, 5], [3, 2, 6]], [[4, 1, 5, 7], [5, 2, 4, 6, 8], [6, 3, 5, 9]]]
>>> {k: v for k, *v in itertools.chain.from_iterable(l)}
{1: [2, 4], 2: [1, 3, 5], 3: [2, 6], 4: [1, 5, 7], 5: [2, 4, 6, 8], 6: [3, 5, 9]}

現在for通過平整l列表,我們只有一個for循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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