Можно ли из списка списков получить словарь с объединением значений на основании совпадения ключа?

Можно ли из такой структуры:

a = [
  [1, [2, 3]],
  [2, [1, 3]], 
  [3, [1, 2]], 
  [1, [5, 6]]
]

получить словарь следующего вида: {1: [2, 3, 5, 6], 2: [1, 3], 3: [1, 2]}?

Пробовал через обычный dict(), но тогда, если ключ уже существует, то берется его последнее значение и получается {1: [5, 6], 2: [1, 3], 3: [1, 2]}.


Ответы (3 шт):

Автор решения: Sergey Gornostaev
from collections import defaultdict

d = defaultdict(list)

for k, v in a:
    d[k].extend(v)
→ Ссылка
Автор решения: dIm0n

Вот так вот:

a = [
    [1, [2, 3]],
    [2, [1, 3]], 
    [3, [1, 2]], 
    [1, [5, 6]]
]
    
d = {}
    
for k, v in a:
    d.setdefault(k, []).extend(v)
    
print(d)
→ Ссылка
Автор решения: MaxU

Чуть более сложный вариант, но зато он позоляет получить любые структуры в результате - кортежи, вложенные списки и т.д.:

from itertools import groupby
    
res = {
    a: sum([x[1] for x in b], []) 
    for a,b in groupby(
        sorted(a), 
        key=lambda x: x[0]
    )
}

результат:

In [46]: res
Out[46]: {1: [2, 3, 5, 6], 2: [1, 3], 3: [1, 2]}
→ Ссылка