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抓取京东商城手机列表url实例代码
Dec 18 Python
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
用Python实现KNN分类算法
Dec 22 Python
python如何为创建大量实例节省内存
Mar 20 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
softmax及python实现过程解析
Sep 30 Python
Python笔记之代理模式
Nov 20 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
python各种excel写入方式的速度对比
Nov 10 Python
python中的unittest框架实例详解
Feb 05 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
我的论坛源代码(三)
2006/10/09 PHP
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
php数据库备份还原类分享
2014/03/20 PHP
php调整服务器时间的方法
2015/04/03 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python中的迭代器漫谈
2015/02/03 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
Linux的主要特性
2016/09/03 面试题
结婚典礼证婚词
2014/01/11 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
教师申诉制度
2014/01/29 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
清洁工个人工作总结
2015/03/05 职场文书
垂直极限观后感
2015/06/08 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS