2017-02-08 1 views
0

У меня есть массив списков, которые мне нужно превратить в словарь, где первый элемент в каждом списке является ключом, а остальные элементы - значениями, соответствующими этому ключу.Преобразование вложенного списка списков в словарь

Например, массив:

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 

Затем я перебирал массив и добавлял числа к различным элементам списка, которые являются w расширены списки. Дайте мне знать, если это не ясно!

Есть ли простой способ петли через массив и создать это? Благодаря!

+0

@ kawadhiya21 Как вы уверены? _Technically_ - список списков. _Technically_ это не массив ничего. –

+0

Выполнение данного утверждения. Это будет исключение. – kawadhiya21

+0

Да, вы правы, OP не хватает запятой. Я исправлю это. –

ответ

4

Вы можете использовать вложенную Dict понимание с 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]} 
+0

Это отличное решение! Здесь всегда есть чему поучиться в stackoverflow. Спасибо @niemmi –

0

Использование генератора для выравнивания списка,

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 
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.