1.用递归的方法实现
dic = { '北京': { '东城': { '沙河': { '链家':{}, '安居客':{'三里屯'} }, '天通苑': {'北方明珠', '天通尾货'} }, '朝阳': { '花家地': {'朝阳公园', '望京soho'}, '北小河': {'北小河公园', '北京中学'} } }, '上海': { '虹桥': { '虹桥机场': ['超市', '特产店', '水吧'], '东方明珠': ['电影院', '游泳馆', '餐馆'] }, '浦东': { '景秀路': ['世纪公园', '立交桥'], '中环路': ['鲁迅公园', '同济大学'] } }, '河北': { '石家庄': { '行唐': ['东正', '阳关'], '赵县': ['赵州桥', '高村乡'] }, '唐山': { '滦南县': ['司各庄镇', '安各庄镇'], '玉田县': ['玉田镇', '亮甲店镇'] } } } #递归的方法实现 def sanjicaidan(dic): while True: for k in dic: print(k) key = input('input>>>>') if key == 'b' or key == 'q': return key elif key in dic.keys() and dic[key]: ret = sanjicaidan(dic[key]) #递归调用 if ret == 'q': return 'q' sanjicaidan(dic)
2.用堆栈的方式实现
dic = { '北京': { '东城': { '沙河': { '链家':{}, '安居客':{'三里屯'} }, '天通苑': {'北方明珠', '天通尾货'} }, '朝阳': { '花家地': {'朝阳公园', '望京soho'}, '北小河': {'北小河公园', '北京中学'} } }, '上海': { '虹桥': { '虹桥机场': ['超市', '特产店', '水吧'], '东方明珠': ['电影院', '游泳馆', '餐馆'] }, '浦东': { '景秀路': ['世纪公园', '立交桥'], '中环路': ['鲁迅公园', '同济大学'] } }, '河北': { '石家庄': { '行唐': ['东正', '阳关'], '赵县': ['赵州桥', '高村乡'] }, '唐山': { '滦南县': ['司各庄镇', '安各庄镇'], '玉田县': ['玉田镇', '亮甲店镇'] } } } l=[dic] while l: for key in l[-1]: #l[-1]就是dic print(key) k = input('input>>>').strip() #如果输入的k在dic中且k还有值,那么就执行下面 if k in l[-1].keys() and l[-1][k]: l.append(l[-1][k]) #当输入北京时,l[-1][k]就相当于{'东城':{...},'朝阳':{...}} #l.append执行后l就是l=[dic,{'东城':{...},'朝阳':{...}}] elif k == 'b': l.pop() #输入b时就把{'东城':{...},'朝阳':{...}}pop出去 elif k == 'q': break