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

  1. """
    处理前的字典
    {'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': ''}
    """
  1. #递归遍历param
  2. def get_dict_allkeys(dict_a,special_value,random_function):
  3. if isinstance(dict_a,dict):
  4. for key, value in dict_a.items():
  5. if isinstance(value,str) and (value.startswith('$')) and value[1:len(value)] == special_value:
  6. dict_a[key] = random_function
  7. get_dict_allkeys(value,special_value,random_function)
  8. elif isinstance(dict_a,list):
  9. for k in dict_a:
  10. if isinstance(k,dict):
  11. for key,value in k.items():
  12. if (value.startswith('$')) and value[1:len(value)] == special_value:
  13. k[key] = random_function
  14. get_dict_allkeys(value, special_value, random_function)
  15.  
  16. #需要处理的参数都写到这里
  17. def random_fun(data):
  18. get_dict_allkeys(data, 'name', random_name())
  19. get_dict_allkeys(data,'sex',random_sex())
  20. get_dict_allkeys(data,'mobile',create_phone())
  21. get_dict_allkeys(data,'birthday',creat_birthday())
  22. get_dict_allkeys(data,'idNo',getRandomIdCard())
  1. """
    处理后的字典
    {'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': ''}
    """
  2.  
  3. 转载:该方法是获取嵌套的json key值集合。 若需要获取所有json嵌套的keyvalue值,修改对应return即可。
  1. self.key_list = []
  2. def get_dict_allkeys(self, dict_a):
  3. """
  4. 多维/嵌套字典数据无限遍历,获取json返回结果的所有key值集合
  5. :param dict_a:
  6. :return: key_list
  7. """
  8. if isinstance(dict_a, dict): # 使用isinstance检测数据类型
  9. for x in range(len(dict_a)):
  10. temp_key = dict_a.keys()[x]
  11. temp_value = dict_a[temp_key]
  12. self.key_list.append(temp_key)
  13. self.get_dict_allkeys(temp_value) # 自我调用实现无限遍历
  14. elif isinstance(dict_a, list):
  15. for k in dict_a:
  16. if isinstance(k, dict):
  17. for x in range(len(k)):
  18. temp_key = k.keys()[x]
  19. temp_value = k[temp_key]
  20. self.key_list.append(temp_key)
  21. self.get_dict_allkeys(temp_value)
  22. return self.key_list

  1. # 测试
  2. dict01 = {"a": 1, "b": {"kk": {"nn": 111, "pp": "ppoii"}, "yy": "123aa", "uu": "777aa"},
  3. "c": [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": 6}]}
  4. get_dict_allkeys(dict01)
  5. # 输出
  6. ['a', 'c', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'kk', 'pp', 'nn', 'yy', 'uu']

 

  1.  

Python--递归函数实现:多维嵌套字典数据无限遍历的更多相关文章

  1. 无限遍历,Python实现在多维嵌套字典、列表、元组的JSON中获取数据

    背景 在做接口自动化的过程中,接口返回的数据是  列表字典循环嵌套  格式的,所以怎样通过一个key值,获取到被包裹了多层的目标数据成为了摆在我面前的一个问题. 一开始没想自己写,但是搜索后发现虽然很 ...

  2. !!Python字典增删操作技巧简述+Python字典嵌套字典与排序

    http://developer.51cto.com/art/201003/186006.htm Python编程语言是一款比较容易学习的计算机通用型语言.对于初学者来说,首先需要掌握的就是其中的一些 ...

  3. python 将列表嵌套字典的unicode字符串转换为str格式的字符串的方法

    今天在进行django开发的过程中遇到了一个非常棘手的问题, 因为需求原因, 需要将一份数据存为json格式到数据库中, 如下面这种格式: list_1 = [{"name":&q ...

  4. python 分享一个通过 (key1.key2.key3) 形式获取嵌套字典值的方法

    最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,如果一层层的去剥,效率不高,脚本繁重,所以写了一个可以通过(key1.key2.key3)形式获取嵌套字典值的方法,如有不对或者需要优 ...

  5. Python 中的多维字典

    Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...

  6. python关于字典嵌套字典,列表嵌套字典根据值进行排序

    python 对于字典嵌套字典, 列表嵌套字典排序 例:列表嵌套自字典:d = [{"name": '张三', 's': 68}, {'name': '李四', 's': 97}] ...

  7. Python学习入门基础教程(learning Python)--8.1 字典数据添加与删除

             1. 字典数据添加 这个很简单,像赋值那样一项项赋值即可.语法结构如下 dict_obj[key] = value 添加数据项示例如下 >>> d1 = {'cod ...

  8. 飘逸的python - 实现一个pretty函数美丽的输出嵌套字典

    演示样例: d = { "root": { "folder2": { "item2": None, "item1": N ...

  9. Python基础-元组、列表、字典

    元组tuple 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组.例:(1,2,3)("a","b","c&q ...

随机推荐

  1. ubuntu之路——day7.2 regularization

    所有的正则化方法来自于吴恩达老师的免费公开课:https://mooc.study.163.com/learn/2001281003?tid=2001391036#/learn/content?typ ...

  2. 10分钟彻底理解Redis持久化和主从复制

    在这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制. 什么是 Redis 持久化? Redis 作为一个键值对内存数据库(NoSQL),数据都存储在内存当中, ...

  3. Workstation 14 Returns EFI Network Start PXE over IPv4 When Installing New Win10 Guest O/S

    当启动出现“Click any key to boot from DVD”时候,需要键盘点击一下,即可解决. 参考:https://communities.vmware.com/thread/5730 ...

  4. mycat启动报Unable to start JVM: No such file or directory (2)【转】

    mycat启动失败,查看日志 /mycat/logs/wrapper.log发现如下信息 1  STATUS | wrapper  | 2017/11/22 16:15:17 | --> Wra ...

  5. Tosca:设置执行结束时间

  6. 蓝牙BLE: GATT Profile 简介(GATT 与 GAP)

    一. 引言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上.GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很 ...

  7. Docs-.NET-C#-指南-语言参考-关键字-值类型:char

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:char 1.返回顶部 1. char(C# 参考) 2019/10/22 char 类型关键字是 .NET System.C ...

  8. Python3基础 运算 加减乘除、取余数

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  9. 【Mybatis】MyBatis之插件开发(十)

    MyBatis插件开发原理 MyBatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可以改变MyBatis的默认行为(诸如SQL重写之类的),由于插件会深入到MyBatis的核心 ...

  10. RabbitMQ 入门教程(PHP版) 第二部分:工作队列(Work queues)

    工作队列 在第一篇教程中,我们已经写了一个从已知队列中发送和获取消息的程序.在这篇教程中,我们将创建一个工作队列(Work Queue),它会发送一些耗时的任务给多个工作者(Works ). 工作队列 ...