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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
探寻python多线程ctrl+c退出问题解决方案
Oct 23 Python
Python解决鸡兔同笼问题的方法
Dec 20 Python
详解Python中expandtabs()方法的使用
May 18 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
Python3计算三角形的面积代码
Dec 18 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
详解python运行三种方式
May 13 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
Python基于Opencv识别两张相似图片
Apr 25 Python
python学习之panda数据分析核心支持库
May 07 Python
Django分页器的用法你都了解吗
May 26 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
jQuery实现滚动效果
2017/11/17 jQuery
JS实现网页端猜数字小游戏
2020/03/06 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
python自动翻译实现方法
2016/05/28 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
详解Python 循环嵌套
2020/07/09 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
Python grpc超时机制代码示例
2020/09/14 Python
python 图像增强算法实现详解
2021/01/24 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
审核会计岗位职责
2013/11/08 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
爽歪歪广告词
2014/03/20 职场文书
同意落户证明
2015/06/19 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle