Вставить список в 2D-список по определенному индексу - PullRequest
1 голос
/ 04 июня 2019

Я не нашел много о вставке списка в 2D-список.

Я попытался использовать добавление (которое не работает, потому что добавление не может добавить по определенному индексу) и вставка, но вставка не может добавить несколько списков в список.

Я хочу преобразовать этот 2D список

[[0, dataABC, date], [0, dataABC, date], [1, dataABC, date], [1, dataABC, date] , [1, dataABC, date]]

к 3D-списку, чтобы получить прямой доступ к списку определенного индекса.

data = [
[[0, dataABC, date],[0, dataABC, date]],
[[1, dataABC, date], [1, dataABC, date], [1, dataABC, date]]
]

print(data[1]):
[1, dataABC, date], [1, dataABC, date], [1, dataABC, date]

1 Ответ

3 голосов
/ 04 июня 2019

Если они заказаны, вы можете использовать itertools.groupby:

>>> l = [[0, 'data', 'date'], [0, 'data', 'date'], [1, 'data', 'date'], [1, 'data', 'date'] , [1, 'data', 'date']]
>>> results = list(list(v) for k, v in groupby(l, key=lambda x: x[0]))
>>> results
[[[0, 'data', 'date'], [0, 'data', 'date']], [[1, 'data', 'date'], [1, 'data', 'date'], [1, 'data', 'date']]]

Если они не заказаны, используйте collections.defaultdict:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for e in l:
...     d[e[0]].append(e)
...
>>> results = list(d.values())
>>> results
[[[0, 'data', 'date'], [0, 'data', 'date']], [[1, 'data', 'date'], [1, 'data', 'date'], [1, 'data', 'date']]]
...