Вставка Dict теперь сохраняет порядок, но если вы используете более старую версию Python, вам нужно использовать OrderedDict.
lst = ['and', 'power', 'car', 'abc', 'pen', 'doctor', 'pig']
lst.sort() # in-place
d = {}
i = 1
for item in lst:
if item[0].upper() in [k[0] for k in d.keys()]:
i += 1
else:
i = 1
d[item[0].upper() + ' ' + str(i)] = item
Результат:
In [92]: d
Out[92]:
{'A 1': 'abc',
'A 2': 'and',
'C 1': 'car',
'D 1': 'doctor',
'P 1': 'pen',
'P 2': 'pig',
'P 3': 'power'}