Использование itertools.groupby
. В сочетании с operator.itemgetter
для эффективного поиска / нарезки.
from itertools import groupby
from operator import itemgetter
tuple_list = [(1, 'AA', 515), (1, 'BBT', 101), (1, 'CZF', 20), (2, 'TYZ', 8341), (2, 'ONR', 11)]
get_first = itemgetter(0)
result = [list(g) for k, g in groupby(sorted(tuple_list, key=get_first), get_first)]
Результат:
[[(1, 'AA', 515), (1, 'BBT', 101), (1, 'CZF', 20)], [(2, 'TYZ', 8341), (2, 'ONR', 11)]]
Или используйте collections.defaultdict
from collections import defaultdict
d = defaultdict(list)
for t in tuple_list:
d[t[0]].append(t)
result = list(d.values())
Результат:
[[(1, 'AA', 515), (1, 'BBT', 101), (1, 'CZF', 20)], [(2, 'TYZ', 8341), (2, 'ONR', 11)]]