我有以下问题,我正在寻求帮助。我正在运行一些json查询,它返回我已经格式化的结果。
World,Europe
Europe,Italy
Europe,Germany
Germany,Munich
Germany,Frankfurt
第一列提供父级,第二列提供子级。这个想法是用户将孩子作为搜索字符串提供,我需要做的是构建一个首先搜索孩子父母的python列表。存储父值,我们现在将成为搜索条件,以查看它是否是一个孩子,并且它将返回它自己的父级,直到我们一直遍历到顶级节点,依此类推,直到我们到达没有父母的世界。
我知道世界永远是最后的父母,所以如果有帮助的话可以用作某种占位符。我想要的是有一种情况,我的最终名单将包含这些元素,例如我搜索法兰克福。
searchresults = ['Germany','Europe','World')
如果是意大利
searchresults = ['Europe','World')
从某种意义上来说,我的问题是我不确定在Python中我需要从什么开始,因为我陷入了第二次搜索直通。一如往常,任何帮助将不胜感激。
答案 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)
您可以在数组中开始搜索,如果有命中,则该子项的父项可以将其保存在最终数组中。然后再次开始搜索,但这次是作为孩子搜索父母。