Получить элемент списка, сгруппировав его по элементам

уважаемые знатоки. Подскажите пожалуйста. Есть такой список

cur.execute(get_data_from_first_table)

data_frame_from_first_table = cur.fetchall()

data_frame_from_first_table = [ ('1','1','13:40'), ('1','7','13:39'),('1','0','13:38'),('2','10','12:10'),('2','3','12:09'),('3','6','12:08'),('3','0','11:32'),('3','5','11:31'),('3','8','11:30'),('4','2','10:40'),('4','9','10:39'),('4','10','10:38'), ]

Можно ли как-то вытащить из него вторую позицию из каждого элемента, при этом сгруппировав их по первому элементу? Немного кривенько объяснил, но должно получиться вот так:

('1','1','13:40'), ('1','7','13:39'),('1','0','13:38') - одинаковый первый элемент, значит в новый список записывается ('1','7','0')

('2','10','12:10'),('2','3','12:09') - одинаковый первый элемент, значит в новый список записывается ('10','3')

('3','6','12:08'),('3','0','11:32'),('3','5','11:31'),('3','8','11:30') - ('6','0','5','8')

('4','2','10:40'),('4','9','10:39'),('4','10','10:38') - ('2','9','10')

на выходе должно получится следующие: [('1','7','0'), ('10','3'), ('6','0','5', '8'), ('2','9','10')] и так далее


Ответы (1 шт):

Автор решения: CrazyElf

Можете сами просто собрать в словарь что нужно по ключу и потом развернуть обратно в список списков:

from collections import defaultdict

d = defaultdict(list)
data_frame_from_first_table = [ ('1','1','13:40'), ('1','7','13:39'),('1','0','13:38'),('2','10','12:10'),('2','3','12:09'),('3','6','12:08'),('3','0','11:32'),('3','5','11:31'),('3','8','11:30'),('4','2','10:40'),('4','9','10:39'),('4','10','10:38'), ]
for data in data_frame_from_first_table:
    d[data[0]].append(data[1])
    
print(list(d.values()))

Вывод:

[['1', '7', '0'], ['10', '3'], ['6', '0', '5', '8'], ['2', '9', '10']]

Хотя, если вам не нужны какие-то данные, выдаваемые запросом и вы их просто выкидываете, так лучше их сразу и не запрашивать.

→ Ссылка