Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多字索引_Python_List_Dictionary - Fatal编程技术网

Python多字索引

Python多字索引,python,list,dictionary,Python,List,Dictionary,例如:Michael出现在MJ.com、NINE.com和i.com的相应页面的第1、9、34位 请帮我介绍一个python程序,它将索引和关键字作为输入 当我输入'MICHAEL'时。结果应该是: index = {'Michael': [['mj.com',1], ['Nine.com',9],['i.com', 34]], / 'Jackson': [['One.com',4],['mj.com', 2],['Nine.com', 10], ['i.com', 45]]

例如:Michael出现在MJ.com、NINE.com和i.com的相应页面的第1、9、34位

请帮我介绍一个python程序,它将
索引
关键字
作为输入

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

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']]
当我输入“迈克尔·杰克逊”时,结果应该是:

>['mj.com','Nine.com']

由于“
迈克尔”
和“
杰克逊”
连续出现在
'mj.com'
'nine.com'
上,即分别位于(1,2)和(9,10)位置。结果不应显示
'i.com'
,即使它包含两个关键字,但它们不是连续放置的

当我输入“迈克尔·杰克逊惊悚片”时,结果应该是

['mj.com']

因为这三个单词“迈克尔”、“杰克逊”、“颤栗者”分别被连续放置在
'mj.com'
ie位置(1、2、3)


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

使用集合和交集:

>>['mj.com', 'nine.com', 'i.com']
输出:

def func(key,dic):
    keys=key.split()
    values=[set(y if i==0 else y if dic[x][y]-dic[keys[i-1]].get(y,-10000)==1 \
                else None for y in dic[x]) for i,x in enumerate(keys)]
    sett=values[0]
    for y in values[1:]:
        sett &= y
    print(sett)

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

使用集合和交集:

>>['mj.com', 'nine.com', 'i.com']
输出:

def func(key,dic):
    keys=key.split()
    values=[set(y if i==0 else y if dic[x][y]-dic[keys[i-1]].get(y,-10000)==1 \
                else None for y in dic[x]) for i,x in enumerate(keys)]
    sett=values[0]
    for y in values[1:]:
        sett &= y
    print(sett)

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

作为旁注,Udacity CS简介正好涵盖了这个问题。这对正确的输入做出了许多假设(基本上,它从未遇到任何错误的输入)


作为旁注,Udacity 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
现在这里是一个递归方法。首先,接口功能:

index = dict((key.upper(), val) for (key, val) in index.iteritems())
下一个函数完成实际工作。如果只给出一个单词,则返回该单词索引中的条目;否则,过滤位置匹配的索引

def search(query):
    return [site for (site, pos) in search2(query.split())]

当然,如果
pos
实际上可以是每个站点的位置列表,事情会变得更复杂一些。

首先,由于您的搜索似乎忽略了大小写,您应该使用大写(或小写)索引

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
现在这里是一个递归方法。首先,接口功能:

index = dict((key.upper(), val) for (key, val) in index.iteritems())
下一个函数完成实际工作。如果只给出一个单词,则返回该单词索引中的条目;否则,过滤位置匹配的索引

def search(query):
    return [site for (site, pos) in search2(query.split())]


当然,如果
pos
实际上可以是每个站点的一个职位列表,事情会变得更复杂一些…

我正在尝试建立一个多词搜索引擎。你使用数据库吗?这是现实生活还是学校?如果是为了现实生活,你可能想重新思考你的设计……这不是现实生活。我只是试着写两三页。那是学校用的吗。。。除了弄清楚如何操作/解析字典之外,本练习没有什么学术价值……关键字是如何定义的?我正在尝试构建一个多词搜索引擎。你使用数据库吗?这是现实生活还是学校?如果是为了现实生活,你可能想重新思考你的设计……这不是现实生活。我只是试着写两三页。那是学校用的吗。。。除了弄清楚如何操作/解析字典之外,本练习没有什么学术价值……关键字是如何定义的?非常感谢您的帮助!!:)但结果显示,迈克尔·杰克逊不需要i.com wch,因为迈克尔和杰克逊并没有连续地排在i。com@ManabChetia我认为,与其使用列表列表,不如使用字典字典。这是一个更合适的数据结构。你是一个强大的程序员。非常感谢你的帮助。但是仅仅使用list是不可能的,因为我必须更改代码中的许多其他函数。再次感谢。@ManabChetia我尽了最大努力使用列表列表,但失败了:)但是,我建议您使用适当的数据结构,因此更改一些代码肯定会对您有所帮助。对短语执行此操作的一种方法是创建一个伴随字典,其中(关键字、站点)元组作为键,位置作为记录。非常感谢您的帮助!!:)但结果显示,迈克尔·杰克逊不需要i.com wch,因为迈克尔和杰克逊并没有连续地排在i。com@ManabChetia我认为,与其使用列表列表,不如使用字典字典。这是一个更合适的数据结构。你是一个强大的程序员。非常感谢你的帮助。但是仅仅使用list是不可能的,因为我必须更改代码中的许多其他函数。再次感谢。@ManabChetia我尽了最大努力使用列表列表,但失败了:)但是,我建议您使用适当的数据结构,因此更改一些代码肯定会对您有所帮助。对短语执行此操作的一种方法是创建一个伴随字典,其中(关键字、站点)元组作为键,位置作为记录。非常感谢!!我从udacity向CS做了介绍,很高兴你认识到了我的问题。我的建议中有一个错误,所以修复了它。您需要修复此问题,以处理短语中的搜索词不是字典键的情况,这将在我建议的代码中产生错误。不用担心,再次感谢您。不,我以前从未使用过此项。不过我会看看的。非常感谢!!我从udacity向CS做了介绍,很高兴你认识到了我的问题。我的建议中有一个错误,所以修复了它。您需要修复此问题,以处理短语中的搜索词不是字典键的情况,这将在我建议的代码中产生错误。不用担心,再次感谢您。不,我以前从未使用过此项。不过我会去看看的。非常感谢。你知道怎么用呼呼声吗?非常感谢。你知道怎么用呼呼声吗?