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中的decode()方法的使用
May 18 Python
wxPython中listbox用法实例详解
Jun 01 Python
Python中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
pandas对指定列进行填充的方法
Apr 11 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
python常用运维脚本实例小结
Feb 14 Python
Python读写csv文件流程及异常解决
Oct 20 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 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
php桌面中心(二) 数据库写入
2007/03/11 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
应届生自我鉴定
2013/12/11 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
培训班主持词
2014/03/28 职场文书
消防安全责任书范本
2014/04/15 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
教师个人发展总结
2015/02/11 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
公司联欢会主持词
2015/07/04 职场文书
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android
Python加密技术之RSA加密解密的实现
2022/04/08 Python