上次我们说到golm的简单应用这次我们继续带结构化数据的其他操作进行学习。
用法:class glom.Literal(value)
这个方法的功能主要是添加自定义的键值。
例如:
from glom import glom,Literal target = {'a': {'b': 'c'}} spec = {'a': 'a.b', 'e': Literal('666')} spec2 = {'a': 'a.b', 'e': lambda x:"666"} print(glom(target, spec)) print(glom(target, spec2))输出后可以发现结果是一样的:
{'a': 'c', 'e': '666'} {'a': 'c', 'e': '666'}用法:classglom.Coalesce(*subspecs, **kwargs)
该方法会对参数进行挨个尝试,如果都没有就报错,但是可以给定一个默认值,具体用法我们使用几个实例,下面从简单到复杂延时该方法的使用
from glom import glom,Coalesce,CoalesceError
注意点: 经过上面的一系列操作可以发现,Coalesce在找到第一级键值之后就不继续往下找了,然后找下级的键值g6的情况因为a下面没有t了所以报错。 换做g7,因为a下面同样有t所以可以输出为{'name': ['e1']}。
用法glom.OMIT= Sentinel('OMIT')
经过研究OMIT实际是返回一个空的字典用的,我们来看代码
target4 = {'a': 'b'} spec3 = {'a': lambda t: t['a'] if t['a'] == 'a' else OMIT} g8=glom(target4, spec3) target4 = {'a': 'a'} g9=glom(target4, spec3) print(g8) print(g9)上面的代码实际是,做一了一个类似Literal的功能。找键值为a的而且值为a的,如果找到就返回,找不到就赋值OMIT可以得到一个空字典,当然们也可以把上面else OMIT替换为else "666"可以发现我们得到了一个含有键值为666的结构化数据。
用法:glom.Call(func, args=None, kwargs=None)
使用call减少lamda的使用率,做和lamda差不多的功能。
-当target里面需要使用函数时除了使用lamda外还可以用Call。
-Call类似functools.partial的用法,另外可读性比lamda要强的多。
from glom import glom,Call,T class ExampleClass(object): def __init__(self, attr): self.attr = attr self.name = "666" target = {'attr': 3.14} a=glom(target, Call(ExampleClass, kwargs=T))关于T的用法后续我们再进行研究。
转载于:https://www.cnblogs.com/c-x-a/p/9371452.html
相关资源:JAVA上百实例源码以及开源项目