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编程中namedtuple类的用法
Jun 21 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
python matplotlib画图实例代码分享
Dec 27 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
python实现textrank关键词提取
Jun 22 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
Python自动化操作实现图例绘制
Jul 09 Python
Python日志器使用方法及原理解析
Sep 27 Python
python import 上级目录的导入
Nov 03 Python
python中validators库的使用方法详解
Sep 23 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
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
浅析PHP Socket技术
2013/08/02 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
PHP实现简单的计算器
2020/08/28 PHP
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
Python Queue模块详细介绍及实例
2016/12/27 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
Python实现随机爬山算法
2021/01/29 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
工程质量承诺书
2014/03/27 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
Log4j.properties配置及其使用
2021/08/02 Java/Android