我希望能够仅过滤掉 1 个或所有小于某个索引的列表项,但 glom 文档的片段部分中的过滤器片段并没有告诉我如何做到这一点。
示例(仅保留列表中的前 2 个项目):
target = [5, 7, 9]
some_glom_spec = "???"
out = glom(target, some_glom_spec)
assert out == [5, 7]
Run Code Online (Sandbox Code Playgroud)
好问题!您在答案中采用的方法有效,并且您走在正确的道路上enumerate
(这是使用索引进行迭代的 Pythonic 方式),但它可能更令人沮丧(并且更高效!)。这是我的方法:
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]
Run Code Online (Sandbox Code Playgroud)
lambda 的第三次调用将返回 glomSTOP
并且 glom 将停止在列表上迭代。
您可以在此处的 glom API 文档中阅读有关STOP
(相当于 的 glom 单例break
)及其合作伙伴SKIP
(相当于continue
)的更多信息。
归档时间: |
|
查看次数: |
252 次 |
最近记录: |