сгруппировать строки по столбцу в python 3
Имеется csv файл следующего содержания:
aaaaa1;text1;567
aaaaa2;text2;298
aaaaa2;text3;948
aaaaa3;text4;153
aaaaa3;text5;278
aaaaa3;text1;320
aaaaa4;text6;576
aaaaa4;text3;972
aaaaa5;text2;224
...
Необходимо сгруппировать значения столбцов 2 и 3 по значению столбца 1, чтобы на выходе получилось:
aaaaa1:(text1;567)
aaaaa2:(text2;298)&(text3;948)
aaaaa3:(text4;153)&(text5;278)&(text1;320)
aaaaa4:(text6;576)&(text3;972)
aaaaa5:(text2;224)
Подскажите, пожалуйста, какое условие необходимо указать в цикле для получения указанных результатов?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Примерно так можно. Из файла как-нибудь, надеюсь, сами прочитаете.
from collections import defaultdict
d = defaultdict(list)
text = """aaaaa1;text1;567
aaaaa2;text2;298
aaaaa2;text3;948
aaaaa3;text4;153
aaaaa3;text5;278
aaaaa3;text1;320
aaaaa4;text6;576
aaaaa4;text3;972
aaaaa5;text2;224""".split()
for line in text:
ind, _, txt = line.partition(';')
d[ind].append(txt)
d2 = {k:'&'.join([f'({x})' for x in v]) for k,v in d.items()}
print(d2)
Вывод:
{'aaaaa1': '(text1;567)',
'aaaaa2': '(text2;298)&(text3;948)',
'aaaaa3': '(text4;153)&(text5;278)&(text1;320)',
'aaaaa4': '(text6;576)&(text3;972)',
'aaaaa5': '(text2;224)'}