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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
python修改操作系统时间的方法
May 18 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
基于python实现从尾到头打印链表
Nov 02 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 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入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
PHP类型约束用法示例
2016/09/28 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
迪奥官网:Dior.com
2018/12/04 全球购物
物业招聘计划书
2014/01/10 职场文书
公司承诺书怎么写
2014/05/24 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
2016年公司新年寄语
2015/08/17 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书