我希望能够只过滤掉1个,或者可能用glom过滤掉少于某个索引的所有列表项,但是glom文档的摘录部分中的过滤器片段没有向我展示如何做到这一点。 / p>
示例(仅保留列表中的前2个项目):
target = [5, 7, 9]
some_glom_spec = "???"
out = glom(target, some_glom_spec)
assert out == [5, 7]
答案 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)