python嵌套字典遍历_Python--递归函数实现:多维嵌套字典数据无限遍历

原创:多层嵌套字典无限遍历,实现当value值以特殊字符$开头,并且等于某项值时,用随机函数替换该参数

"""

处理前的字典

{'patient': {'avatarPic': '', 'facePic': '', 'busiInsurs': [], 'name': '$name', 'sex': '$sex', 'idNo': '$idNo',

'agebirthday': {'age': 7, 'isMonth': 0, 'birthday': '$birthday', 'isDay': 27, 'isShow': False}, 'age': 7, 'isMonth': '',

'isDay': 27, 'mobile': '$mobile', 'source': '', 'birthday': '$birthday', 'remark': '', 'idens': [{'type': '10', 'idNo': '$idNo'}],

'householdAddress': '', 'address': '', 'bloodType': '', 'marry': '', 'career': '', 'company': '', 'workAddress': '', 'country': '',

'nation': '', 'birthAddress': '', 'telephone': '', 'engName': '', 'objLabelList': [], 'anonymous': False, 'id': '', 'member': None,

'language': None, 'wechat': '', 'weibo': '', 'qq': '', 'email': '', 'iden': [{'type': '10', 'idNo': '$idNo'}], 'contactMobile': '',

'visitNos': [{'type': '', 'no': ''}], 'visitCards': []}, 'objLabelList': [], 'email': '', 'qq': '', 'wechat': '', 'weibo': ''}

"""

#递归遍历param

defget_dict_allkeys(dict_a,special_value,random_function):ifisinstance(dict_a,dict):for key, value indict_a.items():if isinstance(value,str) and (value.startswith('$')) and value[1:len(value)] ==special_value:

dict_a[key]=random_function

get_dict_allkeys(value,special_value,random_function)elifisinstance(dict_a,list):for k indict_a:ifisinstance(k,dict):for key,value ink.items():if (value.startswith('$')) and value[1:len(value)] ==special_value:

k[key]=random_function

get_dict_allkeys(value, special_value, random_function)#需要处理的参数都写到这里

defrandom_fun(data):

get_dict_allkeys(data,'name', random_name())

get_dict_allkeys(data,'sex',random_sex())

get_dict_allkeys(data,'mobile',create_phone())

get_dict_allkeys(data,'birthday',creat_birthday())

get_dict_allkeys(data,'idNo',getRandomIdCard())

"""

处理后的字典

{'patient': {'avatarPic': '', 'facePic': '', 'busiInsurs': [], 'name': '李军', 'sex': '2', 'idNo': '13090220140108181X',

'agebirthday': {'age': 7, 'isMonth': 0, 'birthday': '1982-06-01', 'isDay': 27, 'isShow': False}, 'age': 7, 'isMonth': '',

'isDay': 27, 'mobile': '15130297893', 'source': '', 'birthday': '1982-06-01', 'remark': '',

'idens': [{'type': '10', 'idNo': '13090220140108181X'}], 'householdAddress': '', 'address': '', 'bloodType': '', 'marry': '',

'career': '', 'company': '', 'workAddress': '', 'country': '', 'nation': '', 'birthAddress': '', 'telephone': '', 'engName': '',

'objLabelList': [], 'anonymous': False, 'id': '', 'member': None, 'language': None, 'wechat': '', 'weibo': '', 'qq': '', 'email': '',

'iden': [{'type': '10', 'idNo': '13090220140108181X'}], 'contactMobile': '', 'visitNos': [{'type': '', 'no': ''}], 'visitCards': []},

'objLabelList': [], 'email': '', 'qq': '', 'wechat': '', 'weibo': ''}

"""

转载:该方法是获取嵌套的json key值集合。 若需要获取所有json嵌套的key,value值,修改对应return即可。

self.key_list =[]defget_dict_allkeys(self, dict_a):"""多维/嵌套字典数据无限遍历,获取json返回结果的所有key值集合

:param dict_a:

:return: key_list"""

if isinstance(dict_a, dict): #使用isinstance检测数据类型

for x inrange(len(dict_a)):

temp_key=dict_a.keys()[x]

temp_value=dict_a[temp_key]

self.key_list.append(temp_key)

self.get_dict_allkeys(temp_value)#自我调用实现无限遍历

elifisinstance(dict_a, list):for k indict_a:ifisinstance(k, dict):for x inrange(len(k)):

temp_key=k.keys()[x]

temp_value=k[temp_key]

self.key_list.append(temp_key)

self.get_dict_allkeys(temp_value)return self.key_list

# 测试

dict01 = {"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}]}

get_dict_allkeys(dict01)

# 输出

['a', 'c', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'kk', 'pp', 'nn', 'yy', 'uu']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值