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基础教程之获取本机ip数据包示例
Feb 10 Python
Python实现从url中提取域名的几种方法
Sep 26 Python
用Python遍历C盘dll文件的方法
May 06 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
python实现数据写入excel表格
Mar 25 Python
python中的句柄操作的方法示例
Jun 20 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
PHP常用数组函数介绍
2014/07/28 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
vue实现商城购物车功能
2017/11/27 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
利用python批量检查网站的可用性
2016/09/09 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
python实现最长公共子序列
2018/05/22 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
会计求职自荐信
2014/06/20 职场文书
2014年纠风工作总结
2014/12/08 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS