wangyanyan

原创:多层嵌套字典无限遍历,实现当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
def get_dict_allkeys(dict_a,special_value,random_function):
            if isinstance(dict_a,dict):
                for key, value in dict_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)
            elif isinstance(dict_a,list):  
                for k in dict_a:
                    if isinstance(k,dict):
                        for key,value in k.items():
                            if (value.startswith(\'$\')) and value[1:len(value)] == special_value:
                                k[key] = random_function
                            get_dict_allkeys(value, special_value, random_function)

#需要处理的参数都写到这里
def random_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 = []
def get_dict_allkeys(self, dict_a):
        """
        多维/嵌套字典数据无限遍历,获取json返回结果的所有key值集合
        :param dict_a: 
        :return: key_list
        """
        if isinstance(dict_a, dict):  # 使用isinstance检测数据类型
            for x in range(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)  # 自我调用实现无限遍历
        elif isinstance(dict_a, list):
            for k in dict_a:
                if isinstance(k, dict):
                    for x in range(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\']

 



分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-25
  • 2021-09-23
  • 2022-12-23
  • 2021-07-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-10
  • 2022-12-23
  • 2021-06-07
  • 2022-12-23
相关资源
相似解决方案