Python(18)3种方法--多维嵌套字典无限遍历,获取所有的key值

测试字典为:

raw_dict = {"a": 1, "b": {"kk": {"nn": 111, "pp": "ppoii"}, "yy": "123aa", "uu": "777aa"}, "c": [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": 6}]}

第一种方法

class analyse_data1:
    key_list = []
    
    def get_key(self, data):
        if isinstance(data, dict):
            for key in data.keys():
                if isinstance(data[key], dict):
                    self.get_key(data[key])
                if isinstance(data[key], (tuple, list)):
                    for i in range(len(data[key])):
                        if isinstance(data[key][i], dict):
                            self.get_key(data[key][i])
                self.key_list.append(key)
        return self.key_list

第二种方法(建议使用)

class analyse_data2:
    key_list = []
    
    def get_key(self, data):
        if isinstance(data, dict):
            for key in data.keys():
                self.get_key(data[key])
                self.key_list.append(key)
        if isinstance(data, (tuple, list)):
            for i in range(len(data)):
                self.get_key(data[i])
        return self.key_list

第三种方法

class analyse_data3:
    key_list =[]
    
    def get_key(self, dict_a):
        """多维/嵌套字典数据无限遍历,获取json返回结果的所有key值集合"""
        if isinstance(dict_a, dict):
            for x in range(len(dict_a)):
                temp_key = list(dict_a.keys())[x]
                temp_value = dict_a[temp_key]
                self.key_list.append(temp_key)
                self.get_key(temp_value)    #自我调用实现无限遍历
        elif isinstance(dict_a, list):
            for k in dict_a:
                if isinstance(k, dict):
                    for x in range(len(k)):
                        temp_key=list(k.keys())[x]
                        temp_value=k[temp_key]
                        self.key_list.append(temp_key)
                        self.get_key(temp_value)
        return self.key_list

类实例analyse_data()调用以上三种办法

if __name__ == '__main__':
    print(analyse_data1().get_key(raw_dict))
    print(analyse_data2().get_key(raw_dict))
    print(analyse_data3().get_key(raw_dict))

返回都为:

['a', 'nn', 'pp', 'kk', 'yy', 'uu', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'c']
['a', 'nn', 'pp', 'kk', 'yy', 'uu', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'c']
['a', 'b', 'kk', 'nn', 'pp', 'yy', 'uu', 'c', 'a', 'b', 'a', 'b', 'a', 'b']
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值