介绍复杂用法
本篇文章给大家分享的是有关如何在python中使用抢模块,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
简单使用
我们来看看最简单的用法:
d =, {“a": {“b": {“c": 1}}} print(偷(d,“a.b.c")), #, 1
在这里,我们有一个嵌套三层的json结构,我们想获取最里层的c对应的值,正常的写法应该是:
打印(d [“a"] [“b"] [“c"])
如果到这里,我说看比传统方式好一些,因为你不用一层层地写中括号和引号,你会不会嗤之以鼻?
好,我们再来看看下面的情况:
d =, {“a": {“b":没有}} 打印(d [“a"] [“b"] [“c"])
遍历到一个没有对象,你会收到下面的错误:
Traceback (most recent call 最后): File 才能;“/用户/cxhuan/文档/python_workspace/mypy/pmodules/pglom/glomstudy.py",, line 10,拷贝& lt; module> ,,,印刷(d [“a"] [“b"] [“c"]) TypeError: & # 39; NoneType& # 39;, object is not subscriptable
我们来看看偷的处理方式:
得到glom import 一瞥 d =, {“a": {“b":没有}} print(偷(d,“a.b.c"))
同样地,偷不能把错误的输出成对的,你会得到以下错误:
Traceback (most recent call 最后): File 才能;“/用户/cxhuan/文档/python_workspace/mypy/pmodules/pglom/glomstudy.py",, line 11日,拷贝& lt; module> ,,,print(偷(d,“a.b.c")) File 才能“/图书馆/框架/Python.framework/版本/3.7/lib/python3.7/网站/看/core.py",, line 2181年,抢拷贝 ,,,raise 犯错 glom.core.PathAccessError: error raised  while 加工、details 下面。 ,Target-spec trace (most recent 最后一个): ,安康;目标:{& # 39;一个# 39;:,{& # 39;b # 39;:,没有}} ,安康;规范:& # 39;a.b.c # 39; glom.core.PathAccessError: could not  access & # 39; c # 39;,, part 2, of 路径(& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;),, got 错误:,AttributeError (“& # 39; NoneType& # 39;, object has no attribute & # 39; c # 39;“)
如果你仔细看报错内容,你就会发现这报错内容极其详细,一目了然,这对于找程序错误简直是神器!
复杂用法
刚才简单的例子,让大家对偷有了直观的认识,接下来我们看看偷的偷方法的定义:
偷(目标、规范、* * kwargs)
引用>我们看看参数的含义:
<李>
目标:目标数据,可以是dict,列表或者其他任何对象
李> <李>规范:是我们希望输出的内容
李>
下面我们来使用这个方法。
先看一个例子。我们有一个东西,想要获取出所有名称的值,我们可以通过偷来实现:
data =, {“student": {“info": [{“name":“张三“},,{“name":“李四“}]}} info =,偷(数据、,(“student.info",, (“name"))) 打印(信息),#,(& # 39;张三& # 39;,,& # 39;李四& # 39;]如果用传统方式的话,我们可能会需要遍历才能获取到,但是使用抢,我们只需要一行代码就可以了,输出是一个数组。
如果你不想输出数组,而是想要一个东西的话,那也是很简单的:
info =,偷(数据,,{“info":, (“student.info",, [“name"])}) 打印(信息),#,{& # 39;信息# 39;:,(& # 39;张三& # 39;,,& # 39;李四& # 39;]我们只需要将原来的数组赋值给一个字典来接收就好了。
搞定麻烦需求
假如我现在有两组数据,我要取出名称的值:
data_1 =, {“school": {“student": [{“name":“张三“},,{“name":“李四“}]}} data_2 =, {“school": {“teacher": [{“name":“王老师“},,{“name":“赵老师“}]}} spec_1 =, {“name":, (“school.student",, [“name"])} spec_2 =, {“name":, (“school.teacher",, [“name"])} print(偷(data_1, spec_1)), #,{& # 39;名字# 39;:,(& # 39;张三& # 39;,,& # 39;李四& # 39;]} print(偷(data_2, spec_2)), #,{& # 39;名字# 39;:,(& # 39;王老师& # 39;,,& # 39;赵老师& # 39;]}我们通常是这么写,对吗?假如我们有好多组数据,每组都是类似的取法呢?这时候我们就会想办法避免一个个重复写N行参数了,我们可以使用合并方法:
如何在python中使用抢模块