测试字典为:
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']