最近拾回Django学习,实例练习中遇到了对多维字典类型数据的遍历操作问题,Google查询没有相关资料…毕竟是新手,到自己动手时发现并非想象中简单,颇有两次曲折才最终实现效果,将过程记录下来希望对大家有用。
实例数据(多重嵌套):
1 | person = { "male" :{ "name" : "Shawn" }, "female" :{ "name" : "Betty" , "age" : 23 }, "children" :{ "name" :{ "first_name" : "李" , "last_name" :{ "old" : "明明" , "now" : "铭" }}, "age" : 4 }} |
目的:
遍历person中所有嵌套字典类型数据,并以 key : value 的方式显示思路:首先分析数据是否符合字典特征打印该数据的key及对应value循环检查该数据的每一个子value是否符合字典特征,如果符合则迭代执行,不符合则返回循环继续执行至结束
具体代码:
01 | def is_dict(dict_a): #此方法弃用,python已提供数据类型检测方法isinstance() |
04 | except Exception , data: |
08 | def list_all_dict(dict_a): |
09 | if isinstance (dict_a, dict ) : #使用isinstance检测数据类型 |
10 | for x in range ( len (dict_a)): |
11 | temp_key = dict_a.keys()[x] |
12 | temp_value = dict_a[temp_key] |
13 | print "%s : %s" % (temp_key,temp_value) |
14 | list_all_dict(temp_value) #自我调用实现无限遍历 |
结果:
执行 list_all_dict(person),系统回应 :
01 | male : { 'name' : 'Shawn' } |
03 | children : { 'age' : 4 , 'name' : { 'first_name' : '\xc0\xee' , 'last_name' : { 'now' : '\xc3\xfa' , 'old' : '\xc3\xf7\xc3\xf7' }}} |
05 | name : { 'first_name' : '\xc0\xee' , 'last_name' : { 'now' : '\xc3\xfa' , 'old' : '\xc3\xf7\xc3\xf7' }} |
07 | last_name : { 'now' : '\xc3\xfa' , 'old' : '\xc3\xf7\xc3\xf7' } |
10 | female : { 'age' : 23 , 'name' : 'Betty' } |