递归获取嵌套json 的所有key及value值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import json class Get_Dict_All_Keyvalue: """ 递归获取多维嵌套字典所有层级的key和value """ def __init__( self , analysis_dict): #判断类型,如果是str的需要进行loads处理 self .res_dict = {} self .key_name_set = set () #self.key_name_unique = True if isinstance (analysis_dict, dict ): self .recur_dict(analysis_dict) if isinstance (analysis_dict, str ): self .recur_dict(json.loads(analysis_dict)) def recur_dict( self , ana_dict: dict , key_name = ""): """多维/嵌套字典数据无限遍历,获取所有key层和value""" # 使用isinstance检测数据类型:字典类型 if isinstance (ana_dict, dict ): for k, v in ana_dict.items(): if key_name = = "": self .recur_dict(v, k) else : self .recur_dict(v, key_name + f "_{k}" ) # 列表或元组类型 elif isinstance (ana_dict, ( list , tuple )): if len (ana_dict) = = 1 : for i in range ( len (ana_dict)): # 自我调用实现无限遍历,单个不加修饰 if isinstance (ana_dict[ 0 ], dict ): self .recur_dict(ana_dict[i], key_name) else : print (key_name + "=" + str (ana_dict)) self .res_dict[key_name] = str (ana_dict) break else : for i in range ( len (ana_dict)): #判断下列表的元素是不是还是字典,如果是字典那就继续下钻,否则就是终端值 if isinstance (ana_dict[ 0 ], dict ): # 自我调用实现无限遍历,多个增加字母修饰 self .recur_dict(ana_dict[i], key_name + f "_{i}" ) else : print (key_name + "=" + str (ana_dict)) self .res_dict[key_name] = str (ana_dict) break else : print (key_name + "=" + str (ana_dict)) self .res_dict[key_name] = str (ana_dict) last_key_name = key_name.split( '_' )[ - 1 ] if last_key_name not in self .key_name_set: self .key_name_set.add(last_key_name) else : print ( '重复key' , last_key_name) if __name__ = = "__main__" : test_dic = { "name" : "zhangsan" , "address" : { "sheng" : "beijing" , "shiji" : "beijing" , "shiqu" : [ "shijingshan" , "p" ], "qu" : { "1dong" : "1" , "2dong" : "2" }}} t = Get_Dict_All_Keyvalue(test_dic) # 传入空字典{},即ana_dicts初始值为{} print (t.res_dict) print (t.res_dict.keys()) print (t.res_dict.values()) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2017-07-31 CTP交易函数大全