Ассоциируйте буквы с их значением и сортируйте вывод в python

Пожалуйста, помогите в этом. У меня есть такой вклад:

 a = """A|9578
 C|547
 A|459
 B|612
 D|53
 B|6345
 A|957498
 C|2910"""

Я хочу напечатать отсортированные номера, связанные с каждой буквой, например:

 A_0|459
 A_1|957498
 A_2|9578
 C_0|2910
 C_1|547
 B_0|612
 B_1|6345
 D_0|53

До сих пор мне удавалось хранить в массиве b буквы и цифры, но я застрял, когда пытался создать словарь-массив для объединения одной буквы со своими значениями, я получаю эту ошибку.

 b = [i.split('|') for i in a.split('\n')]
 c = dict()
 d = [c[i].append(j) for i,j in b]
 >>> d = [c[i].append(j) for i,j in b]
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 1, in <listcomp>
 TypeError: list indices must be integers or slices, not str

Я работаю над Python 3.6 на всякий случай. Заранее спасибо.

1 ответ

Решение

Мы разбиваем строку на пары, сортируем эти пары, а затем используем groupby а также enumerate придумать индексы.

from itertools import groupby
from operator import itemgetter

def process(a):
    pairs = sorted(x.split('|') for x in a.split())
    groups = groupby(pairs, key=itemgetter(0))
    for _, g in groups:
        for index, (letter, number) in enumerate(g):
            yield '{}_{}|{}'.format(letter, index, number)

for i in process(a): print(i)

дает нам

A_0|459
A_1|957498
A_2|9578
B_0|612
B_1|6345
C_0|2910
C_1|547
D_0|53
Другие вопросы по тегам