сгруппировать строки по столбцу в 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)'}
→ Ссылка