使用字典和链表python

使用字典和链表python,python,dictionary,Python,Dictionary,我有一本字典,它们的关键字是一个单词,我想在元素中保存一个链表,类似这样的东西 字典 要素 hi linkedlist1 你好linkedlist2 我已经用数组做了 dictionari={} for textoactual in texto: archi = open(textoactual,'r') lines = archi.readlines() for row in lines: for word in row.split(' '):

我有一本字典,它们的关键字是一个单词,我想在元素中保存一个链表,类似这样的东西

字典

  • 要素
  • hi linkedlist1
  • 你好linkedlist2
我已经用数组做了

dictionari={}
for textoactual in texto:
    archi = open(textoactual,'r')
    lines = archi.readlines()
    for row in lines:
        for word in row.split(' '):
            if word in dictionari:
                aux = dictionari[word] 
                aux_txt = textoactual.replace('.txt','')
                if not(aux_txt in aux): 
                    aux.append(aux_txt)
                    dictionari[word]=aux
            else:
                aux_txt = textoactual.replace('.txt','')
                dictionari[word] = makelist(aux_txt)

EDIT3由于这个问题在一个多月前就被接受了,所以这个节目可能太晚了,但我还有一件事要补充

事实上,Python有一个标准的C-ish链表实现,即
collections
模块中的
deque
类。这是你的电话号码

dequeobject
block
节点的双链接列表组成

因此,如果您需要Python中的快速链接列表,请使用
deque

EDIT2基于OP的评论

…因为我想看看当我 搜索信息

链表中的搜索复杂度与数组(或基于数组的结构)中的搜索复杂度相等,约为O(n),其中n是容器中的元素数。但是,由于Python内置的数据结构经过了大量优化和C语言加载,它们在实际使用中运行速度会快得多。当您需要在列表的任何位置进行固定时间的插入/删除时,或者当您不想弄乱动态大小的数组时,链表都很有用,但这似乎与您的情况不同。因为您实际上是在寻找快速搜索,所以需要一个哈希表,因此使用
set
s来存储文件名。为此,请替换
匹配单词和文件中的以下行

res.setdefault(word, llist.LinkedList()).insert_with_lookup(file_title)

编辑。OP更新了请求。如果
LinkedList
内容保存在名为
llist
的单独模块中:

import os
import llist


def match_words_and_files(directory):
    directory = os.path.abspath(directory)
    res = {}
    for file_name in filter(os.path.isfile, os.listdir(directory)):
        file_title = os.path.splitext(file_name)[0]
        with open(os.path.join(directory, file_name)) as inp:
            for line in inp:
                parsed_line = line.rstrip().split()
                for word in parsed_line:
                    res.setdefault(word, llist.LinkedList()).insert_with_lookup(file_title)
    return res
原创帖子

如果您想要Python中的链表,可以通过这种方式实现(显然这不是唯一的方法)

让我们创建一个,并将其增长一点

print(list(linked_list.iter_links()))
输出:

[3, 2, 1]
附言


我看不出有任何理由在您的案例中使用链表。

archi=open(text'r')
行中的
text
是什么?您也可以简单地在archi中执行
行操作
。您不必将它们全部读入
,并在行中执行
。还有-你所说的
数组
是什么意思<代码>如果字典中有单词
?现在你是说dictionari.keys()中的单词
?这似乎有不少问题。你能分享这个示例文本文件吗?也许有人能帮你开始吗?我已经提交了一个编辑,可能是text实际
对于行中的行
读起来有点奇怪。为什么不对行中的行进行
?那么,基本上你是在问如何在python中实现链表?很抱歉,我没有正确解释。我从一个目录中读取许多文件,并将每个文件逐字分隔成一行,然后将该单词作为键保存在字典中,并将该单词出现的文件名保存在链接列表中。在上面的代码中,我使用了一个列表,但现在我想使用一个链接列表。很抱歉,我没有正确解释。我从一个目录中读取许多文件,并将每个文件逐字分隔成一行,然后将该单词作为键保存在字典中,并将该单词出现的文件名保存在链接列表中。在上面的代码中,我用一个列表创建它,但现在我想用一个链接的list@OmarSanchez给你。非常感谢,当我用
打印字典时再问一个问题,非常感谢,当我用result=match\u words\u和\u files(directory)打印字典时再问一个问题返回0x01E7D5D0处类似hello对象的值,而不是链接对象的值list@OmarSanchez发生这种情况是因为LinkedList类没有
\uu str\uu
\uu repr\uu
方法。我会加上它们。
print(list(linked_list.iter_links()))
[3, 2, 1]