Вы можете использовать collections.defaultdict
для решения O ( n ):
from collections import defaultdict
start_list = [('A99', 2, 3, 'B1'), ('A21', 3, 4, 'B1'), ('A123', 4, 5, 'B2'),
('A22', 3, 6, 'B2'), ('A12', 4, 6, 'B1')]
res = defaultdict(list)
for value, _, _, key in start_list:
res[key].append(value)
Результат:
defaultdict(list, {'B1': ['A99', 'A21', 'A12'],
'B2': ['A123', 'A22']})
ЕслиВы не возражаете против tuple
элементов, для вложенной структуры вы можете использовать:
res_lst = list(res.items())
[('B1', ['A99', 'A21', 'A12']), ('B2', ['A123', 'A22'])]
Или для получения точного желаемого результата используйте понимание списка:
res_lst = [[k, v] for k, v in res.items()]
[['B1', ['A99', 'A21', 'A12']], ['B2', ['A123', 'A22']]]