搜索模式并在新搜索查询中使用结果

时间:2015-11-28 18:56:45

标签: python search tree

我有以下问题,我正在寻求帮助。我正在运行一些json查询,它返回我已经格式化的结果。

World,Europe
Europe,Italy
Europe,Germany
Germany,Munich
Germany,Frankfurt

第一列提供父级,第二列提供子级。这个想法是用户将孩子作为搜索字符串提供,我需要做的是构建一个首先搜索孩子父母的python列表。存储父值,我们现在将成为搜索条件,以查看它是否是一个孩子,并且它将返回它自己的父级,直到我们一直遍历到顶级节点,依此类推,直到我们到达没有父母的世界。

我知道世界永远是最后的父母,所以如果有帮助的话可以用作某种占位符。我想要的是有一种情况,我的最终名单将包含这些元素,例如我搜索法兰克福。

searchresults = ['Germany','Europe','World') 

如果是意大利

searchresults = ['Europe','World') 

从某种意义上来说,我的问题是我不确定在Python中我需要从什么开始,因为我陷入了第二次搜索直通。一如往常,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

首先处理数据:

data = """World,Europe
Europe,Italy
Europe,Germany
Germany,Munich
Germany,Frankfurt"""

M = dict( tuple(reversed(line.split(','))) for line in data.split('\n') )

这导致这本字典:

>>> M
{ 'Europe': 'World',
  'Germany': 'Europe',
  'Italy': 'Europe',
  'Frankfurt': 'Germany',
  'Munich': 'Germany' }

从那个可以简单地跟随给定项目的字典到其父项,直到到达顶部并用此积累路径:

def path(loc):
    result = [loc]
    while loc != 'World':
        loc = M[loc]
        result.append(loc)
    return result

print path('Germany')
print path('Italy')

打印哪些:

['Germany', 'Europe', 'World']
['Italy', 'Europe', 'World']

请注意,如果loc不存在,则会引发KeyError

您可以通过更改以下内容来允许任何无父项目成功终止路径:

    while loc != 'World':
        loc = M[loc]

要:

    while loc in M:
        loc = M[loc]

答案 1 :(得分:1)

这是一个简单的解决方案:

worldList= [];
worldList+= [["World","Europe"]];
worldList+= [["Europe","Italy"]];
worldList+= [["Europe","Germany"]];
worldList+= [["Germany","Munich"]];
worldList+= [["Germany","Frankfurt"]];

finalList= [];

currentPlace= "Frankfurt"; #we suppose this is the user choice

sizeLength= len(worldList);
i= 0;

while i<sizeLength and currentPlace!="World":
    if worldList[i][1]==currentPlace:
        finalList+= [worldList[i][0]];
        currentPlace= worldList[i][0];
        i=0;
    else:
        i+= 1;


print finalList

输出:

[&#39; Germany&#39;,&#39; Europe&#39;,&#39; World&#39;]

答案 2 :(得分:0)

您可以在数组中开始搜索,如果有命中,则该子项的父项可以将其保存在最终数组中。然后再次开始搜索,但这次是作为孩子搜索父母。