帮助识别和变形对象的例程集合。

morph的Python项目详细描述


morph提供以下功能来帮助识别对象类型:

NameFunctionality
^{tt1}$Is obj a string?
^{tt2}$Is obj a sequence-like (i.e. iterable) type (but not a string or dict)?
^{tt3}$Is obj a dict-like type? This means that it must have at least the following methods: keys(), values(), and items().

morf提供以下功能来帮助变形对象:

NameFunctionality
^{tt4}$Converts obj to a bool; if string-like, it is matched against a list of “truthy” or “falsy” strings; if bool-like, returns itself; then, if the default parameter is not ^{tt5}$ (which defaults to ^{tt6}$), returns that; otherwise throws a ValueError exception.
^{tt7}$Converts obj to a list; if string-like, it splits it according to Unix shell semantics (if keyword split is truthy, the default); if sequence-like, returns itself converted to a list (optionally flattened if keyword flat is truthy, the default), and otherwise returns a list with itself as single object.
^{tt8}$Extracts a subset of key/value pairs from a dict-like object where the key is a specific value or has a specific prefix.
^{tt9}$Converse of morph.pick().
^{tt10}$Converts a multi-dimensional list or dict type to a one-dimensional list or dict.
^{tt11}$Reverses the effects of flatten (note that lists cannot be unflattened).
^{tt12}$Recursively transforms sequences & dicts in object.

扁平化

当展平类似序列的对象(即列表或元组)时, morph.flatten递归地将多维数组减少为 单一维度,但仅适用于每个派生列表的元素 是列表式的。例如:

[1,[2,[3,'abc','def',{'foo':['zig',['zag','zog']]}],4]]# is morphed to[1,2,3,'abc','def',{'foo':['zig',['zag','zog']]},4]

当展开一个类似dict的对象时,它会折叠list-and-dict- 子键分为索引和点式顶级键。例如:

{'a':{'b':1,'c':[2,{'d':3,'e':4,}]}}# is morphed to{'a.b':1,'a.c[0]':2,'a.c[1].d':3,'a.c[1].e':4,}

(这在处理ini文件时非常有用,因为它只能 扁平化:扁平化和非扁平化函数允许转换 在复杂结构和平面ini文件之间)。

请注意,列表永远不能是不平坦的,而不平坦的听写是 不保证往返一致。后者可能发生在 要压平的字条上有带特殊字符的键, 例如句点('.')或方括号('[]')。

挑选和省略

morph的pickomit函数允许您提取一组键 (或属性)来自一个类似于dict的对象(或普通对象)。这些 不管 提供的值–即,如果None作为源给定,则为空dict 被退回。此外,以下可选关键字参数 接受:

  • dict

    指定应返回的类类型,默认为 到标准pythondict类型。

  • 前缀

    对于pick,指定仅以指定的 字符串将被返回(并为指定的键过滤)。 把前缀从键中去掉。如果没有指定键, 这将只返回具有指定前缀的键。

    对于省略键,指定以指定值开头的键 应该从返回的dict中删除。

  • 如果指定并truthy,则指定为pick省略被计算为多维项地址,如 由morph.flatten生成的。

示例:

d={'foo':'bar','zig.a':'b','zig.c':'d'}morph.pick(d,'foo','zig.a')# ==> {'foo', 'bar', 'zig.a': 'b'}morph.pick(d,prefix='zig.')# ==> {'a': 'b', 'c': 'd'}morph.pick(d,'c',prefix='zig.')# ==> {'c': 'd'}morph.omit(d,'foo')# ==> {'zig.a': 'b', 'zig.c': 'd'}morph.omit(d,prefix='zig.')# ==> {'foo': 'bar'}classmydict(dict):passmorph.pick(dict(foo='bar',zig='zag'),'foo',dict=mydict)# ==> mydict({'foo': 'bar'})

由于某些限制,这也适用于对象属性。为了 示例:

classX():def__init__(self):self.foo='bar'self.zig1='zog'self.zig2='zug'defzigMethod(self):passx=X()morph.pick(x,'foo','zig1')# ==> {'foo': 'bar', 'zig1': 'zog'}morph.pick(x,prefix='zig')# ==> {'1': 'zog', '2': 'zug'}morph.pick(x)# ==> {}morph.omit(x,'foo')# ==> {'zig1': 'zog', 'zig2': 'zug'}morph.omit(x,prefix='zig')# ==> {'foo': 'bar'}morph.omit(x)# ==> {'foo': 'bar', 'zig1': 'zog', 'zig2': 'zug'}

转换

可以使用morph.xformhelper函数递归转换 列表和字典树中的所有项–这有效地允许 应用于嵌套list/dict的列表理解的易用性 结构。

示例:

morph.xform([2,[4,{6:8}]],lambdaval,**kws:val**2)# ==> [4, [16, {36: 64}]]

注意,回调函数xformer,作为第二个函数传递 morph.xform的参数应始终支持任意数字 关键字参数的 有点像**kws

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Kafka producer大量内存使用(泄漏?)   java NullPointerException。。。正在插入数据但无法检索数据[Mysql DB]   java spring+jpa+hibernate=没有可用于当前线程的实际事务的EntityManager无法可靠地处理“persist”调用   getelementbyid在没有ID的情况下如何在java中使用GetElementsById   java有没有一种使用WatchService强制轮询的方法?   java将值从jframe传递给另一个jframe并使用它   Java/Groovy中带重试的反应式事件处理   具有两个包装器元素的java Jackson XML ArrayList输出   java总是在范围内使用不同的随机元素   取消选择java下拉列表值   多线程如何在Java中为对象的不同成员拥有不同的同步块   java如何使用多线程从文本文件中读取输入   java Spring启动附加崩溃命令   java使用公共或单独的actionPerfomed方法有什么区别   java用Spring3.0中的SpEL替换JSP中的EL   java作为windows服务运行应用程序时无法访问共享文件夹   java xml 1.1规范中的“解析数据”是什么意思?   以编程方式设置JComboBox索引时java触发ItemListener   java Android WebView:只加载HTML,不加载JS或CSS(在某些设备中)   Java:计算do/while循环的数量