Преобразовать список кортежей в словарь - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть список кортежей с тремя элементами:

A = [[(72, 1, 2), (96, 1, 4)], 
     [(72, 2, 1), (80, 2, 4)], 
     [], 
     [(96, 4, 1), (80, 4, 2), (70, 4, 5)],
     [(70, 5, 4)],
     ]

Мне нужно преобразовать его в словарь в этом формате (обратите внимание, что вторым элементом в кортеже будет ключ):

A_dict = { 1: {2:72, 4:96},
           2: {1:72, 4:80},
           3: {},
           4: {1:96, 2:80, 5:70},
           5: {4:70},
         }

Есть ли способ конвертировать A в A_dict?

Я пробовал это:

A_dict = {b:{a:c} for a,b,c in A}

, но я получил ошибку:

ValueError: недостаточно значений для распаковки (ожидается 3, получено 2)

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы можете просто сделать:

A_dict = {k+1: {t[2]: t[0] for t in l} for k, l in enumerate(A)}

>>> A_dict
{
 1: {2: 72, 4: 96}, 
 2: {1: 72, 4: 80}, 
 3: {}, 
 4: {1: 96, 2: 80, 5: 70}, 
 5: {4: 70}
}
0 голосов
/ 04 декабря 2018

Итерируя по индексам списка, в соответствии с его длиной.И для каждого значения, строящего свой собственный словарь:

A_dict = {i + 1 : {v[2] : v[0] for v in A[i]} for i in range(len(A))}

выведет:

{1: {2: 72, 4: 96},
 2: {1: 72, 4: 80},
 3: {},
 4: {1: 96, 2: 80, 5: 70},
 5: {4: 70}}

На самом деле ваш желаемый код:

A_dict = {A[i][0][1] : {v[2] : v[0] for v in A[i]} for i in range(len(A)) if len(A[i]) > 0}

Но это будет пропустить«третья строка, так как нет списка, поэтому не может определить фактический ключ, согласно вашей спецификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...