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 相关文章推荐
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
python对象及面向对象技术详解
Jul 19 Python
Python 中 list 的各项操作技巧
Apr 13 Python
python安装Scrapy图文教程
Aug 14 Python
Python多进程并发与多线程并发编程实例总结
Feb 08 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
浅析Python3 pip换源问题
Jan 06 Python
Pytorch中.new()的作用详解
Feb 18 Python
python tkinter实现连连看游戏
Nov 16 Python
python飞机大战游戏实例讲解
Dec 04 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图像处理类代码分享
2012/01/19 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Python3 操作符重载方法示例
2017/11/23 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
python 模块导入问题汇总
2021/02/01 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
实习自我鉴定范文
2013/10/30 职场文书
学生党支部先进事迹
2014/02/04 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
表扬信范文
2015/05/04 职场文书
Nginx配置之禁止指定IP访问
2022/05/02 Servers