在字典列表中提取相同的值(如果它存在

时间:2017-12-04 21:37:57

标签: python dictionary indexing

我试图为文档实现搜索引擎,所以我有我的索引:

{'term1': [[document_id1, term_frequency], [document_id2, term_frequency]......]},
{'term2': [[document_id3, term_frequency], [document_id2, term_frequency]......]}

依旧......

我应该要求一些条款并找到所有文件(已完成此部分), 但是如何才能找到我的词典列表中出现的所有doc_ids?

换句话说,我需要所有包含查询所有单词的文档。 我试过这个,但它没有用

    def match(query):
        match_docs=[]
        for doc in find_doc(query):
            for k,v in doc.items():
                for j in v:
                    if j[0] in i:
                       match_docs.append(j)
        return match_docs

例如

    terms=[{'rose':[['3',2],['4',4]]},{'trains':[['3',4],['6',5]]}]

我需要它返回我' 3'

2 个答案:

答案 0 :(得分:0)

鉴于一份文件,找到一个单词是否很简单:

>>> "plump" in open("ulysses.txt", 'r').read()
True

可以使用更复杂的查询来采用相同的方法:

>>> query = ["Stately", "plump", "Buck", "Mulligan"]
>>> [_ in open("ulysses.txt", 'r').read() for _ in query]
[True, True, True, True]

我将给出的最后一个提示是,如果iterable为空,或者all(iterable)评估为True,则bool(x)函数返回True所有的价值观。

>>> all([_ in open("ulysses.txt", 'r').read() for _ in query])
True
>>> all([_ in open("dubliners.txt", 'r').read() for _ in query])
False

你应该毫无疑问地扩展这种方法来检查更多文档。

答案 1 :(得分:0)

为每个查询创建一组文档,然后找到联合。如果查询是搜索词[[term1“,”term2“等]的列表,并且find_doc返回与任何搜索词匹配的所有文档的列表,那么您将希望一次匹配一个:

def match(query):
    match_docs=[]
    for q in query:
        # generates a list of document IDs for one term at a time
        match_docs.append([doc[0] for doc in find_doc([q])])
    # get the intersection
    # fixed this line in an edit
    s = set(match_docs[0]).intersection(*match_docs)
    return list(s)