Python 将嵌套列表转换为字典

Python 将嵌套列表转换为字典,python,arrays,dictionary,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=[[[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理解:


您可以将嵌套的dict理解用于:


使用生成器展平列表

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

使用生成器展平列表

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

下面是另一个基于@niemmi-answer的解决方案,使用的可能更具可读性:

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

现在,通过展平
l
列表,我们只得到了一个
循环。

下面是另一个基于@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]}

现在,通过展平
l
列表,我们只得到了一个
循环。

@kawadhiya21你怎么这么肯定?从技术上讲,这是一个列表列表。从技术上讲,它不是一个数组。执行有问题的语句。它将抛出异常。是的,你是对的,OP缺少一个逗号。“我会改正的。”文琴佐奇说。目前尚不清楚这些列表嵌套的深度。我想你应该等OP来纠正它。@Ekhumaro我错了,因为OP缺少一个逗号。但是,简单地假设OP的“深层嵌套”是不正确的,而实际上这可能是他们正在使用的数据结构,这是一种疏忽;)@kawadhiya21你怎么这么肯定?从技术上讲,这是一个列表列表。从技术上讲,它不是一个数组。执行有问题的语句。它将抛出异常。是的,你是对的,OP缺少一个逗号。“我会改正的。”文琴佐奇说。目前尚不清楚这些列表嵌套的深度。我想你应该等OP来纠正它。@Ekhumaro我错了,因为OP缺少一个逗号。但是,简单地假设OP的“深层嵌套”是不正确的,而实际上这可能是他们正在使用的数据结构,这是一种疏忽;)这是一个伟大的解决方案!在stackoverflow上总有一些东西需要学习。感谢@niemmiSweet,我遇到了一个类似但略有不同的问题,我可以调整此解决方案,使之很好地适应。谢谢这是非常酷的语法。这是一个伟大的解决方案!在stackoverflow上总有一些东西需要学习。感谢@niemmiSweet,我遇到了一个类似但略有不同的问题,我可以调整此解决方案,使之很好地适应。谢谢这是非常酷的语法。