如何创建一个字典,其中包含文本中的单词作为键和“它出现的子列表”作为值?

问题描述 投票:0回答:3

我的问题与其他问题非常相似,但我的清单有点特别。我必须用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}

但我的清单仍然是空的。提前谢谢你的回复!我会非常感激的

python search-engine
3个回答
0
投票
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
投票

这个怎么样?

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]})

0
投票

这是我到目前为止的代码:

  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]

它似乎工作,但键是字母,值是字母出现的子列表

© www.soinside.com 2019 - 2024. All rights reserved.