之前看过一篇博客,对递归讲的比较好:
递归的调用是:
- 回溯:每次向深层次进行不断
调用
,称之为回溯 - 递推:回溯到某个层次,然后会停止,然后一层层的
返回
,这个过程称之为递推
我们看到递归一个是调用,二是层级的返回,,递归是从大到小着层调用,最后以最小层结束,可以这么理解,比如阶乘的递归是是n*f(n-1),n是递减的,递归内存中最多调用1000次,不然内存会溢出
根据这个思想,自己写了递归获取字典所有层级的键,大家可以体会下递归的思想
# 测试字典
dict1 = { "aa":"bbbb", "cccc":{"dddd":"eeee", "ffff":{ "gggg":"hhhh" } } } # 定义空列表,将键值放入其中 key_list = [] # 函数的参数不需要传入字典,查看data_json类型是dict,之前传参是**kwargs,回调就不对 def get_k(data_json): print type(data_json) if isinstance(data_json, dict): for key in data_json.keys(): if isinstance(data_json[key], dict): get_k(data_json[key]) key_list.append(key) return key_list print(get_k(dict1))
测试结果如下: