Получить элемент списка, сгруппировав его по элементам
уважаемые знатоки. Подскажите пожалуйста. Есть такой список
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 шт):
Можете сами просто собрать в словарь что нужно по ключу и потом развернуть обратно в список списков:
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']]
Хотя, если вам не нужны какие-то данные, выдаваемые запросом и вы их просто выкидываете, так лучше их сразу и не запрашивать.