Как присвоить ключу значения списка, полученных из цикла python
Пишу программу, в которой из текстового файла слова из текста - это ключи, а номера строк в которых они находятся - это значения ключей. dic = {}
with open('text.txt', 'w') as kennedy:
kennedy.write('we observe \n today we \n are victory \n are part')
with open('text.txt', 'r') as kenn:
count = 0
for line in kenn:
count += 1
clean_line = line.replace('\n', ' ')
split_line = clean_line.split()
for word in split_line:
if word not in dic:
lis = []
lis.append(count)
dic[word] = lis
else:
dic[word].append(count)
print(dic)
Возникло два вопроса:
- Долго не могла понять как добавить списку значение при следующих итерациях, а
lis.append(count)дает не правильные цифры. Интуитивно просто написалаdic[word].append(count), но не могу понять, dic[word] это ключ словаря, почему append работает? Из - за того, что я присвоила ранееdic[word] = lisи ключ стал листом? Тут я запуталась - Как по другому можно более грамотно и красиво решить эту задачу, не используя ennumirate и подобное. Чисто как у меня, используя самые банальные инструменты, списки и словари?
Ответы (1 шт):
Автор решения: ganz
→ Ссылка
Прежде всего обрати внимание на встроеный модуль fileinput, что касается кода
for line in kenn:
count += 1
clean_line = line.replace('\n', ' ') # нужно юзать line.strip(), так как формат окончания строк различен у винды и линукса
split_line = clean_line.split()
with open('text.txt', 'w') as kennedy:
kennedy.write('we observe \n today we \n are victory \n are part')
dic={}
count = 0
for line in kenn:
count += 1
split_line=line.strip().split(' ') #strip здесь удаляет перенос строк
for word in split_line:
if word not in dic:
dic[word] = count
else:
if isinstance(dic[word],list):
dic[word].append(count)
else:
#суть условия эльсе в том, что изначально у нас в качестве значения строки, следовательно следует преобразовать строку в список с одним элементом и добавить новое значение, то есть нижеследющий код обрабатывает добавление второго элемента в список
dic[word]=list(dic[word])
dic[word].append(count)
#dic[word]=list(dic[word],count)
print(dic)
#{'we': 1, 'observe': 1, 'today': 2, 'are': 3, 'victory': 3, 'part': 4}
остальной код не понял зачем, мб не разобрался в вопросе