Как создать словарь, содержащий слова из текста в качестве ключей и «подсписок, в котором он появляется» в качестве значений? - PullRequest
0 голосов
/ 14 апреля 2019

Мой вопрос очень похож на другие, но здесь мой список особенный. Я должен создать поисковик в Python. Для этого я должен создать словарь, как я сказал в заголовке.

Позвольте мне дать вам контекст:

У меня есть текст, который состоит из нескольких частей, разделенных "[==========]".

Как:

  [blablabla][blabliblou]
  [==========]
  [blablablou][blibloubla]
  [=========]
  [oubabababa][baboulila]

Я создал алгоритм, который объединяет эти списки, пока мы не «нажмем» на «==========», и собрал их в один список, где [blablabla blabliblou] - это список [O], [blablablou] [blibloubla] список [1] ​​и т. д. *

Алгоритм:

  import re
  file = open("mytext.txt","r",encoding="utf-8")
  list = []
  dico = {}
  d = file.read()

  x = re.split(r"=+", d)
  for i in range(len(x)):
  liste.append(x[i])

У меня есть вывод вроде:

  [ [blablabla blabliblou] [blablablou blibloubla] [oubabababa baboulila] ]

Но теперь вторым шагом является создание словаря, в котором все слова текста указаны в качестве ключа, а подсписок (и) содержат их в качестве значения.

Я попытался использовать условный цикл следующим образом:

  import re
  file = open("mytext.txt","r",encoding="utf-8")
  list = []
  numd = 0
  dico = {}
  d = file.read()

  for x in file:
  x = re.split(r"=+", d)
     for i in range(len(x)):
     list.append(x[i])
     numd =+ 1
        for word in list:
           if word in dico:
               if numd not in dico[word]:
                  dico[word].append(numd)
           else:
              dico[word] = [numd]

Ожидаемый результат:

    {blablabla:1, blablilou:1, blablablou:2, blibloubla:2, oubabababa:3,
baboulila:3}

но мой список все еще пуст. Спасибо заранее за ваш ответ! Я был бы так благодарен

Ответы [ 3 ]

0 голосов
/ 14 апреля 2019
from collections import defaultdict

l = [ ["blablabla", "blabliblou"], ["blablablou", "blibloubla"], ["oubabababa", "baboulila"] ]

d = defaultdict(list)
for i, line in enumerate(l):
    [d[word].append(i) for word in line]

print(dict(d))
>>> {'blablabla': [0], 'oubabababa': [2], 'blablablou': [1], 'blabliblou': [0], 'baboulila': [2], 'blibloubla': [1]}

0 голосов
/ 14 апреля 2019

Это код, который у меня есть:

  import re 
  from collections import defaultdict 
  file = open("mytext.txt","r",encoding="utf-8") 
  l = [] 
  d = file.read() 

  x = re.split(r"=+", d) 
  for i in range(len(x)): 
     l.append(x[i]) 

  d = defaultdict(list) 
 for i, line in enumerate(l): 
    [d[word].append(i) for word in line]

Кажется, что это работает, но ключи - это буквы, а значения - это подсписки, в которых встречаются буквы.

0 голосов
/ 14 апреля 2019

Как насчет этого?

from collections import defaultdict
all_dict = defaultdict(list)
for index, val in enumerate(x):
    for value in val:
        if value not in all_dict:
            all_dict[value].append(index)

print(all_dict)

Получит ожидаемый результат:

defaultdict(list,
            {'blablabla': [0],
             'blabliblou': [0],
             'blablablou': [1],
             'blibloubla': [1],
             'oubabababa': [2],
             'baboulila': [2]})
...