2017-02-19 2 views
0

Я хочу создать функцию, которая получает текстовый файл в качестве параметра и возвращает словарь с каждым из слов в текст, связанный со списком строк, в которых слово встречается в тексте. Это то, что я придумал:Создание словаря, связывающего каждое слово текстового файла со списком строк, где оно встречается в файле

def dictionary(file): 
    in_file=open(file, 'r') 
    words=[] 
    d={} 
    lines=in_file.readlines() 

    for line in lines: 
     words=words+line.split(' ') 

    for j in words: 
     for i in range(len(lines)): 
      if j in lines[i]: 
       d[j]=i 
    return d 

Однако, это не совсем то, что я хотел, так как он показывает только один индекс строки (а не в списке), где появляется слово. Спасибо заранее.

+0

Что именно вы хотите? словарь со всеми словами и их номер строки? – Arman

+1

Вот как работают словари, по одному значению за ключ. Какой результат вы ожидали? – jonrsharpe

+0

Вы можете сделать dict, где каждое значение представляет собой список чисел, если это то, что вы хотите. Что вам нужно? – khelwood

ответ

0

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

def dictionary(file): 
    in_file=open(ficheiro, 'r') 
    words=[] 
    d={} 
    lines=in_file.readlines() 

    for line in lines: 
     words=words+line.split(' ') 

    for j in words: 
     if (j not in d): 
      d[j] = [] 
      for i in range(len(lines)): 
       if j in lines[i]: 
        d[j].append(i) 
    return d 
+0

Это действительно создает довольно странный вывод, например, ключ/слово «кролик» в моем текстовом файле был связан со следующим значением: «rabbit.»: [12, 14, 17, 12, 14, 17]. В других более частых словах список повторяется довольно много раз. Любые мысли по этому поводу? –

+0

Этот вывод был связан с несколькими вхождениями одного и того же слова. Каждый раз весь ваш файл снова анализируется. Поэтому повторяется. Обновлен мой ответ. – conste

0

Вот функция, которая должна делать то, что вы ищете, с аннотациями:

def dictionary(filename): 
    # Pass the function a filename (string) 

    # set up a dict to hold the results 

    result = dict() 

    # open the file and pass it to enumerate 
    # this combination returns something like a list of 
    # (index i.e. line number, line) pairs, which you can 
    # iterate over with the for-loop 

    for idx, line in enumerate(open(filename)): 

     # now take each line, strip any whitespace (most notably, 
     # the trailing newline character), then split the 
     # remaining line into a list of words contained in that line 

     words = line.strip().split() 

     # now iterate over the list of words 

     for w in words: 

      # if this is the first time you encounter this word, 
      # create a list to hold the line numbers within 
      # which this word is found 

      if w not in result: 
       result[w] = [] 

      # now add the current line number to the list of results for this word 

      result[w].append(idx) 

    # after all lines have been processed, return the result 
    return result 

Некоторые ссылки на соответствующие функции (они Wouldn «т дисплей должным образом в аннотации):

open

enumerate

strip

+0

Немногие изменения, и он отлично работает. Однако я не знаком с обозначениями, так как я все еще просто ученик. Какие действия для idx, строка в перечислении (open (f)) выполняют ?:: –

+0

Конечно, справедливо. Просто обновлено аннотациями. Надеюсь, это поможет – gary

+0

@Joe - проверка, это ответ на ваш вопрос? – gary

Смежные вопросы