python - 切片?

标签 python 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已为您提供保障。字符串被解析并转换为 Path实例。路径很方便,Ts 很精确。

如果您想将它们混合在一起,您可以将它们与元组连接或使用显式 Path 构造函数。
>>> Path('a.b', T[1:3])
Path('a.b', T[slice(1, 3, None)])

关于python - 切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033920/

相关文章:

python - 如何有条件地选择numpy数组中的元素

python - 如何使用 t.c.telnet 构建端点

python - Glom 处理或跳过具有不同键的数据的 PathError?

python - 使用Python模块Glom,将不规则嵌套列表提取到扁平字典列表中

python - 如何在保持索引结构的同时对多索引中的值进行排序

python - 导入 PyQt5 时 DLL 加载失败

python - 保持 TCP 套接字连接事件和读/写协调

python - 通过使用 Python Glom 过滤其他属性的列表来获取嵌套属性的值

python - 从递归嵌套字段列表创建部分字典