Python 多词索引

标签 python list dictionary

index = {'Michael': [['mj.com',1], ['Nine.com',9],['i.com', 34]], / 
         'Jackson': [['One.com',4],['mj.com', 2],['Nine.com', 10], ['i.com', 45]], /
         'Thriller' : [['Seven.com', 7], ['Ten.com',10], ['One.com', 5], ['mj.com',3]}

# In this dictionary (index), for eg: 'KEYWORD': 
# [['THE LINK in which KEYWORD is present,'POSITION
# of KEYWORD in the page specified by link']]

eg: Michael is present in MJ.com, NINE.com, and i.com at positions 1, 9, 34 of respective pages.

请帮助我编写一个将 indexKEYWORDS 作为输入的 python 程序。

当我输入 'MICHAEL' 时。结果应该是:

>>['mj.com', 'nine.com', 'i.com']

当我输入 'MICHAEL JACKSON' 时。 结果应该是:

>>['mj.com', '九网']

因为“Michael” 和“Jackson” 出现在 “mj.com”“nine.com” 连续,即分别在位置 (1,2) & (9,10)。结果不应显示 'i.com',即使它包含两个 KEYWORDS 但它们不是连续放置的。

当我输入 'MICHAEL JACKSON THRILLER', 结果应该是

['mj.com']

因为 'MICHAEL', 'JACKSON', 'THRILLER' 这 3 个词在 'mj.com' 中连续放置,即位置 (1, 2, 3)分别。

如果我输入 'THRILLER JACKSON''THRILLER FEDERER', 结果应该是 NONE

最佳答案

作为旁注,Udacity Intro to CS 恰好涵盖了这个问题。这对正确的输入做出了一些假设(基本上它永远不会遇到任何不正确的输入)。

def lookup(index,KEYWORDS):
    kw = KEYWORDS.split()
    if len(kw) == 1:
        return [site[0] for site in index[kw[0]]]
    else:
        positions = {}
        result = []
        kw = KEYWORDS.split()
        for kword in kw:
            for site in index[kword]:
                positions[(kword,site[0])]=site[1]
        for i in range(0,len(kw)-1):
            cur_urls = [site[0] for site in index[kw[i]]]
            next_urls = [site[0] for site in index[kw[i+1]]]
            if i == 0:
                result = cur_urls
            for url in cur_urls:
                if url in next_urls:
                    if not (positions[kw[i+1],url]-positions[kw[i],url]) == 1:
                        result.remove(url)
                else:
                    if url in result:
                        result.remove(url)
        return result

关于Python 多词索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572225/

相关文章:

python - Jinja 变量在 for 循环中未正确设置

python - 快速解析类似 csv 的文件

python - GTK3 python 中的线程

python - 为什么我不能修改作为函数内部参数传递的列表?

string - 在 Haskell 列表推导式中进行一些替换

Python:For循环在第一次迭代后停止向字典添加项目

python - 使用模拟更改函数调用的第二个结果

c++ - 使用其指针从列表中删除项目

c# - 如何使用结果映射将 dapper 结果转换为字典

python - 仅使用特定键从字典字典创建数据框