从python集合中安全地提取(深层)键/路径从来就不是那么容易。
pluck的Python项目详细描述
plucky.pluckable愉快地包装任何python对象并允许 对于带有属性和项getter(例如.attr)的链式软抽取, ["key"]、[idx]、[::2]或组合:["key1", "key2"], 以及[0, 3:7, ::-1];甚至:["length", 0:5, 7])。
plucky.pluck将允许您提取与^{tt10}相同的。$ (关于提取操作),但接受字符串选择器 而不是python表达式。
plucky.plucks使您能够通过 使用由类似字典的键和类似列表的键组成的简明字符串选择器 索引/切片。表示cluck simplified,因为它只支持 pluck语法。它更简单,效率更高。
plucky.merge有助于两个数据结构的递归合并,减少 使用提供的二进制运算符的叶值。
安装
plucky可用作zero dependencypython包。安装时使用:
$ pip install plucky
用法
frompluckyimportpluck,plucks,pluckable,mergepluckable(obj).users[2:5,10:15].name["first","middle"].valuepluck(obj,'users[2:5, 10:15].name["first", "middle"]')plucks(obj,'users.2:5.name.first')merge({"x":1,"y":0},{"x":2})
示例
obj={'users':[{'uid':1234,'name':{'first':'John','last':'Smith',}},{'uid':2345,'name':{'last':'Bono'}},{'uid':3456}]}plucks(obj,'users.1.name')# -> {'last': 'Bono'}plucks(obj,'users.name.last')# -> ['Smith', 'Bono']plucks(obj,'users.*.name.first')# -> ['John']pluckable(obj).users.name.first.value# -> ['John']pluckable(obj).users.uid[0,2,1].value# -> [1234, 3456, 2345]pluckable([datetime.datetime.now(),None,{'month':8}])[::2].month# -> [5, 8]pluckable(obj,skipmissing=False,default='Unnamed').users.name.first.value# -> ['John', 'Unnamed', 'Unnamed']
更多的例子!:)
pluckable(obj).users[:,::-1].name.last.value# -> ['Smith', 'Bono', 'Bono', 'Smith']pluckable(obj).users[:,::-1].name.last[0,-1].value# -> ['Smith', 'Smith']pluck(obj,'users[:, ::-1].name.last[0, -1]')# -> ['Smith', 'Smith']plucks([1,{'val':2},3],'val')# -> [2]plucks([1,{'val':[1,2,3]},3],'1.val.-1')# -> 3merge({"x":1,"y":0},{"x":2})# -> {"x": 3, "y": 0}merge({"a":[1,2],"b":[1,2]},{"a":[3,4],"b":[3]})# -> {"a": [4, 6], "b": [1, 2, 3]}