在 glom 中切片?
Slicing in glom?
简而言之:
我怎样才能切入glom?也就是说,能够指定我想从多个索引(例如 y = x[(2, 5, 11)]
)中提取,而不仅仅是一个索引(例如 y = x[2]
)。
简单示例:假设我有这个数据:
d = {'_result': [[1, 'a'], [2, 'b'], [3, 'c']]}
要提取“_result”列表列表的命名 zip(*),我可以这样做:
from glom import Spec
extract = Spec(('_result',
lambda x: list(zip(*x)),
lambda x: {'x': x[0], 'y': x[1]})).glom
我会得到我想要的:
>>> extract(d)
{'x': (1, 2, 3), 'y': ('a', 'b', 'c')}
但我希望能够做类似...
extract = Spec(('_result', {'x': '*.0', 'y': '*.1'})).glom
或
extract = Spec(('_result', {'x': '[:].0', 'y': '[:].1'})).glom
更高级的愿望...
我可以想象这样的语法糖能够指定像
这样的路径
"a.[2:3, -5:].{'foo', 'bar'}.name"
可以派上用场。如果它是通过显式 glom.Path 定义,例如
,甚至(并且可能更安全)
from glom import Path
path = Path('a',
((slice(2, 3, None), slice(-5, None, None)),),
{'foo', 'bar'},
'name')
在我的(可能不是最佳选择)迷你语言中,{'foo', 'bar'}
表示我们正在提取这两个键的值。
>>> d = [[1, 'a'], [2, 'b'], [3, 'c']]
>>> glom(d, {'x': [T[0]], 'y': [T[1]]})
{'x': [1, 2, 3], 'y': ['a', 'b', 'c']}
这里是 glom 共同创作者:-)
T has got you covered. Strings are parsed and converted into Path 个实例。路径方便,T精确。
如果您想将它们混合在一起,您可以使用元组连接它们或使用显式 Path 构造函数。
>>> Path('a.b', T[1:3])
Path('a.b', T[slice(1, 3, None)])
简而言之:
我怎样才能切入glom?也就是说,能够指定我想从多个索引(例如 y = x[(2, 5, 11)]
)中提取,而不仅仅是一个索引(例如 y = x[2]
)。
简单示例:假设我有这个数据:
d = {'_result': [[1, 'a'], [2, 'b'], [3, 'c']]}
要提取“_result”列表列表的命名 zip(*),我可以这样做:
from glom import Spec
extract = Spec(('_result',
lambda x: list(zip(*x)),
lambda x: {'x': x[0], 'y': x[1]})).glom
我会得到我想要的:
>>> extract(d)
{'x': (1, 2, 3), 'y': ('a', 'b', 'c')}
但我希望能够做类似...
extract = Spec(('_result', {'x': '*.0', 'y': '*.1'})).glom
或
extract = Spec(('_result', {'x': '[:].0', 'y': '[:].1'})).glom
更高级的愿望...
我可以想象这样的语法糖能够指定像
这样的路径"a.[2:3, -5:].{'foo', 'bar'}.name"
可以派上用场。如果它是通过显式 glom.Path 定义,例如
,甚至(并且可能更安全)from glom import Path
path = Path('a',
((slice(2, 3, None), slice(-5, None, None)),),
{'foo', 'bar'},
'name')
在我的(可能不是最佳选择)迷你语言中,{'foo', 'bar'}
表示我们正在提取这两个键的值。
>>> d = [[1, 'a'], [2, 'b'], [3, 'c']]
>>> glom(d, {'x': [T[0]], 'y': [T[1]]})
{'x': [1, 2, 3], 'y': ['a', 'b', 'c']}
这里是 glom 共同创作者:-)
T has got you covered. Strings are parsed and converted into Path 个实例。路径方便,T精确。
如果您想将它们混合在一起,您可以使用元组连接它们或使用显式 Path 构造函数。
>>> Path('a.b', T[1:3])
Path('a.b', T[slice(1, 3, None)])