将嵌套的列表列表转换为字典

时间:2017-02-08 04:15:02

标签: python arrays 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

然后我循环遍历数组并将数字附加到不同的列表元素,这就是列表扩展的原因。如果不清楚,请告诉我!

是否有一种简单的方法来循环遍历数组并创建它?谢谢!

3 个答案:

答案 0 :(得分:5)

您可以将嵌套字典理解与extended iterable unpacking一起使用:

>>> 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]}

答案 1 :(得分:0)

使用生成器展平列表,

{{1}}

答案 2 :(得分:0)

这是另一种基于@niemmi回答的解决方案,使用itertools.chain()可能更具可读性:

>>> 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循环。