Можно ли из списка списков получить словарь с объединением значений на основании совпадения ключа?
Можно ли из такой структуры:
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]}