Получить слово в файле и добавить номер строки, в которой встречается это слово, и добавить этот номер в список и добавить в словарь

Я пытаюсь написать индекс функции, который принимает один параметр, имя файла (с полной историей) и возвращает словарь, где ключи — это слова в файле, а значения — это списки, содержащие уникальные номера строк в порядке возрастания. ), в котором появляются эти слова.

чтобы получить уникальные ключи, я сделал так:

    with open(filename) as file:
    text = file.read(); 
    list1 = set(text.split())
    print(list1)
    for line_num, line in enumerate(file):
        if any([word in line for word in list1]):
            print (line_num, line)

Не получается получить результат..

Изменения: добавлены примеры данных:

LIET

Now, by Saint Peter's Church and Peter too,
He shall not make me there a joyful bride.
I wonder at this haste; that I must wed
Ere he, that should be husband, comes to woo.
I pray you, tell my lord and father, madam,
I will not marry yet; and, when I do, I swear,
It sh

Ответ должен быть -

{'LIET': [1], 'Now,': [3], 'by': [3], 'Saint': [3], "Peter's": [3], 'Church': [3], 'and': [3, 7], 'Peter': [3], 'too,': [3], 'He': [4], 'shall': [4], 'not': [4, 8], 'make': [4], 'me': [4], 'there': [4], 'a': [4], 'joyful': [4], 'bride.': [4], 'I': [5, 7, 8], 'wonder': [5], 'at': [5], 'this': [5], 'haste;': [5], 'that': [5, 6], 'must': [5], 'wed': [5], 'Ere': [6], 'he,': [6], 'should': [6], 'be': [6], 'husband,': [6], 'comes': [6], 'to': [6], 'woo.': [6], 'pray': [7], 'you,': [7], 'tell': [7], 'my': [7], 'lord': [7], 'father,': [7], 'madam,': [7], 'will': [8], 'marry': [8], 'yet;': [8], 'and,': [8], 'when': [8], 'do,': [8], 'swear,': [8], 'It': [9], 'sh': [9]})

Каков был фактический результат (или ошибка) и желаемый результат? Кроме того, было бы полезно предоставить образцы данных из вашего файла.

Giorgos Myrianthous 07.04.2019 00:54

не получает никакого вывода, что-то не так. образец данных .Он не сделает меня там радостной невестой. Я удивляюсь этой поспешности; что я должна выйти замуж, прежде чем он, который должен быть мужем, придет свататься. Умоляю вас, скажите моему господину и отцу, сударыня, что я еще не выйду замуж;

Naddar Bhatia 07.04.2019 00:57

Проверьте мой ответ ниже

Devesh Kumar Singh 07.04.2019 01:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Следующее должно помочь

def index(filename):
    word_lines = {}
    with open(filename) as file:
        for line_num, line in enumerate(file.readlines(), 1):
            for word in line.split():
                if word in word_lines.keys(): 
                    if line_num not in word_lines[word]:
                        word_lines[word].append(line_num)
                else:
                    word_lines[word] = [ line_num ]
    return word_lines

print(index('test.txt'))

Результат для примера будет:

{'Now,': [1], 'by': [1], 'Saint': [1], "Peter's": [1], 'Church': [1], 'and': [1, 5], 'Peter': [1], 'too,': [1], 'He': [2], 'shall': [2], 'not': [2, 6], 'make': [2], 'me': [2], 'there': [2], 'a': [2], 'joyful': [2], 'bride.': [2], 'I': [3, 5, 6], 'wonder': [3], 'at': [3], 'this': [3], 'haste;': [3], 'that': [3, 4], 'must': [3], 'wed': [3], 'Ere': [4], 'he,': [4], 'should': [4], 'be': [4], 'husband,': [4], 'comes': [4], 'to': [4], 'woo.': [4], 'pray': [5], 'you,': [5], 'tell': [5], 'my': [5], 'lord': [5], 'father,': [5], 'madam,': [5], 'will': [6], 'marry': [6], 'yet;': [6], 'and,': [6], 'when': [6], 'do,': [6], 'swear,': [6], 'It': [7], 'sh': [7]}

Этот ответ не заботится о пунктуации.

Devesh Kumar Singh 07.04.2019 02:10

Я предполагаю, что содержимое файла уже прочитано в строке text. Я также удаляю знаки препинания

text = "He shall not make me there a joyful bride.\n " \
       "I wonder at this haste; that I must wed Ere he, that should be husband, comes to woo. \n" \
       "I pray you, tell my lord and father, madam, I will not marry yet;"
punctuations = '!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
for punctuation in punctuations:
    text = text.replace(punctuation, '')
words = list(set(text.split()))
print(words)
result_dict = {}
for line_num, line in enumerate(text.split('\n')):
    for word in words:
        if word in line:
            if word in result_dict.keys():
                result_dict[word].append(line_num)
            else:
                result_dict[word] = [line_num]

print(result_dict)
{
    'a': [0, 1, 2],
    'shall': [0],
    'bride': [0],
    'He': [0],
    'make': [0],
    'me': [0, 1],
    'not': [0, 2],
    'he': [0, 1, 2],
    'there': [0],
    'joyful': [0],
    'husband': [1],
    'and': [1, 2],
    'must': [1],
    'at': [1, 2],
    'wonder': [1],
    'to': [1],
    'I': [1, 2],
    'wed': [1],
    'this': [1],
    'Ere': [1],
    'comes': [1],
    'woo': [1],
    'that': [1],
    'haste': [1],
    'be': [1],
    'should': [1],
    'father': [2],
    'will': [2],
    'pray': [2],
    'my': [2],
    'yet': [2],
    'you': [2],
    'tell': [2],
    'lord': [2],
    'marry': [2],
    'madam': [2]
}

Извините, я не хочу импортировать строку, если вы можете найти решение без импорта... было бы лучше

Naddar Bhatia 07.04.2019 01:20

строка импорта предназначена для удаления знаков препинания из ваших слов, что, как я полагаю, вам нужно? Если нет, я могу найти другой способ убрать знаки препинания?

Devesh Kumar Singh 07.04.2019 01:31

Другие вопросы по теме