Итак, давайте рассмотрим ваш пример:
words = {}
for line in infile:
line = line.strip()
Это выглядит хорошо для начала. Теперь вы хотите что-то сделать с line
. Возможно, вам понадобится первый символ, к которому вы можете получить доступ через line[0]
:
first = line[0]
Тогда вы хотите проверить, находится ли письмо уже в диктанте. Если нет, вы можете добавить новый пустой список:
if first not in words:
words[first] = []
Затем вы можете добавить слово в этот список:
words[first].append(line)
И все готово!
Если строки уже отсортированы, как в вашем примере файла, вы также можете использовать itertools.groupby
, что немного сложнее:
from itertools import groupby
from operator import itemgetter
with open('infile.txt', 'r') as f:
words = { k:map(str.strip, g) for k, g in groupby(f, key=itemgetter(0)) }
Вы также можете сначала отсортировать строки, что делает этот метод в целом применимым:
groupby(sorted(f), ...)