如何在python中使用抢模块

  介绍

本篇文章给大家分享的是有关如何在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中使用抢模块