一:三级菜单的文艺青年版
dic = { "河北": { "石家庄": ["鹿泉", "藁城", "元氏"], "邯郸": ["永年", "涉县", "磁县"], }, "河南": { "郑州": ["1", "2", "3"], "平顶山": ["4", "5", "6"] }, "山西": { "A": ["11", "22", "33"], "C": ["44", "55", "66"] } } layer_list=[] current=dic while True: for i in current: print(i) choice=input('==>') if choice in current: layer_list.append(current) current=current[choice] elif choice=='q': current=layer_list[-1] layer_list.pop() else: print('错误!请重新输入!')
二.
fields_list=fields.split('|') d={} l=[0] while data: for key in data: if key in fields_list: d[key]=data[key] if type(data[key])==dict: l.append(data[key]) data=l.pop() print(d)
递归的解法:
l='fld2|fld3|fld7|fld19'.split('|') result={} def foo(dic,lst): for i in dic : if i in lst: result[i]=dic[i] if type(dic[i])==dict: foo(dic[i],lst) foo(data,l) print(result)
如此简单!
单论这两个例子,采用栈的方法,有一些共同点:
1 题目特点
情况能无线套下去。无穷无尽
2 解题思路
1 有一个空列表,存储数据。
2 一定有一个不变的变量名,每循环一次,变量名内的数据就会变动,往空列表中追加。
3 这个变量名可能开始就要赋值,直接用最初的字典赋值,拿来用。目前这两个题是这样的,而且都是字典。
4 一定有列表的pop代码。