如何根据列表索引过滤glom中的列表?

时间:2019-08-16 09:14:04

标签: python glom

我希望能够只过滤掉1个,或者可能用glom过滤掉少于某个索引的所有列表项,但是glom文档的摘录部分中的过滤器片段没有向我展示如何做到这一点。 / p>

示例(仅保留列表中的前2个项目):

target = [5, 7, 9]
some_glom_spec = "???"

out = glom(target, some_glom_spec)

assert out == [5, 7]

2 个答案:

答案 0 :(得分:3)

好问题! your answer中采用的方法行之有效,而enumerate的使用方法却是正确的(这是使用Python迭代索引的方式),但它可能会更加复杂(甚至更多)高效!)。这是我的操作方法:

from glom import glom, STOP

target = [1, 3, 5, 7, 9]
spec = (enumerate, [lambda item: item[1] if item[0] < 2 else STOP])
glom(target, spec)
# [1, 3]

第三次调用lambda将返回glom的STOP,并且glom将停止在列表上进行迭代。

您可以在the glom API docs here中进一步了解STOP(等同于break的glom单身人士)及其伙伴SKIP(等同于continue

答案 1 :(得分:1)

到目前为止,我发现这样做的唯一方法是枚举传入的目标,转换为列表,然后使用类似snippet的lambda:

target = [5, 7, 9]
some_glom_spec = (enumerate, list, (lambda t: [i[1] for i in t if i[0] < 2]))

out = glom(target, some_glom_spec)