Benny
Benny

Reputation: 57

Insert list to a 2D list at a specific index

I didn't find a lot about inserting a list to a 2D list.

I tried to use append (which doesn't work because append can't append at specific index) and insert, but insert can't append multiple lists in a list.

I'd like to convert this 2D list

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

to a 3D list to get direct access to the list of a specific index.

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]

Upvotes: 1

Views: 844

Answers (1)

Netwave
Netwave

Reputation: 42718

If they are ordered you can use 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']]]

If they are not ordered use 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']]]

Upvotes: 3

Related Questions