[英]comparing python dictionary values
我正在用python创建一个非常基本的搜索引擎,正在努力创建一种用于处理词组查询的方法,因此,如果2个单词的位置在1之内,它们在文档中彼此相邻,它将输出所有文档编号这发生的地方。
我目前有一本字典,看起来像这样
{'8':[['1170', '1264', '1307', '1559', '1638'], ['197', '1169']],
'6':[['345', '772'], ['346']}
这只是一个布局示例。
w=word, p=position ||
{doc1:[w1p1, w1p2, w1p3],[w2p1, w2p2]}
关键是文档ID,后跟第一个单词在该文档中的位置,然后是第二个单词的位置。 将有与查询中一样多的单词(位置分组)。
我的问题是,有没有一种方法可以比较同一文档ID的1和2nd + 3rd等值? 我想对它们进行比较,以查看单词位置是否仅为另一个单词的+1。
因此,对于doc 6,您可以看到单词1后面紧跟着单词2,这将导致密钥被发回。
有几种方法可以实现您要在此处完成的任务。 我假设根据您给我的示例,总是只有两个单词,并且列表始终是有序的。
无论使用哪种方法,都需要遍历文档(字典)。 在Python中遍历字典很简单; 你可以在这里看到一个例子。 之后,步骤会更改
首选-效率较低,稍微简单一些:
比较两个位置,如果它们在彼此的1个范围内,则返回文档ID。
例:
for documentNumber in docdictionary: for word1location in docdictionary[documentNumber][0]: for word2location in docdictionary[documentNumber][1]: if abs(word1location - word2location) == 1: return documentNumber
第二种选择-效率更高,稍微复杂一些:
如果其中一个列表(例如列表1)用完了数字,而另一个列表(列表2)的值大于第一个列表(列表1)的最后一个值,则返回None。
例:
for documentNumber in docdictionary: list1pos = 0 list2pos = 0 while True: difference = docdictionary[documentNumber][0][list1pos] - docdictionary[documentNumber][1][list2pos] if abs(difference) == 1: return documentNumber if difference < 0: #Page location 2 is greater list1pos++ if list1pos == len(docdictionary[documentNumber][0]): #We were at the end of list 1, there will be no more matches break else: #Page location 1 is greater list2pos++ if list2pos == len(docdictionary[documentNumber][1]): #We were at the end of list 2, there will be no more matches break return None
提醒一下,选项2 仅在列表始终排序时才起作用。 另外,您不必总是立即返回文档ID。 如果您希望该对发生的所有文档而不是查找的第一个文档,则可以将文档ID添加到列表中。 您甚至可以使用词典轻松跟踪单词对在每个文档中出现的次数。
希望这对您有所帮助! 如果有任何不清楚的地方,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.