python使用参数对嵌套字典进行取值的方法


Posted in Python onApril 26, 2019

因一些特殊需求需要以参数的形式获取字典中特定的值,网上搜了一下并没有特别好的实现(并没有太认真去找~),所以自己实现了一个,以供大家参考:) 。

话不多说,直接上代码:

def dict_get(dic, locators, default=None):

 '''

 :param dic: 输入需要在其中取值的原始字典 <dict>
 :param locators: 输入取值定位器, 如:['result', 'msg', '-1', 'status'] <list>
 :param default: 进行取值中报错时所返回的默认值 (default: None)
 :return: 返回根据参数locators找出的值

 '''

 if not isinstance(dic, dict) or not isinstance(locators, list):
  return default

 value = None

 for locator in locators:
  if not type(value) in [dict, list] and isinstance(locator, str) and not can_convert_to_int(locator):
  try:
   value = dic[locator]
  except KeyError:
   return default
  continue
  if isinstance(value, dict):
  try:
   value = dict_get(value, [locator])
  except KeyError:
   return default
  continue
  if isinstance(value, list) and can_convert_to_int(locator):
  try:
   value = value[int(locator)]
  except IndexError:
   return default
  continue

 return value

 def can_convert_to_int(input):
 try:
  int(input)
  return True
 except BaseException:
  return False

Best Practice

好的我们来进行一次简单的最佳实践:)

if __name__ == '__main__':
 dict_test = {"result": {"code": "110002", "msg": [{'status': 'ok'}, {'status': 'failed'}]}}
 result = dict_get(dict_test, ['result', 'msg', '-1', 'status'])
 print(result)

下面是控制台的输出,大家可以看到输出是符合预期结果的:)

failed

Process finished with exit code 0

这次分享到此为止~ 我们有缘再见:)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
基于python历史天气采集的分析
Feb 14 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
python3排序的实例方法
Oct 20 Python
Python机器学习之基础概述
May 19 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 Python
python将视频转换为全字符视频
Apr 26 #Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 #Python
Python3.5内置模块之random模块用法实例分析
Apr 26 #Python
python3.5安装python3-tk详解
Apr 26 #Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 #Python
python实现名片管理系统项目
Apr 26 #Python
python面向对象实现名片管理系统文件版
Apr 26 #Python
You might like
农民C键的运用技巧
2020/03/04 星际争霸
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
Python中的字符串替换操作示例
2016/06/27 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
python退出循环的方法
2020/06/18 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
PHP经典面试题
2016/09/03 面试题
干部培训自我鉴定
2014/01/22 职场文书
土地租赁意向书
2014/07/30 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
教师党员整改措施
2014/10/24 职场文书
化验室岗位职责
2015/02/14 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android