[英]How do I filter a list in glom based on list index?
我希望能够过滤出1个,或者可能是所有列表项都少于某个索引的glom,但glom文档的片段部分中的过滤器片段并没有告诉我如何做到这一点。
示例(仅保留列表中的2个第一项):
target = [5, 7, 9]
some_glom_spec = "???"
out = glom(target, some_glom_spec)
assert out == [5, 7]
好问题! 你在答案中得到的方法是有效的,并且你在使用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]
lambda的第三次调用将返回glom的STOP
并且glom将停止在列表上进行迭代。
您可以在此处的glom API文档中阅读有关STOP
(相当于break
的glom singleton)及其合作伙伴SKIP
(相当于continue
) 的更多信息 。
到目前为止,我发现这样做的唯一方法是枚举传入的目标,转换为列表,然后在这个片段中有一个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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.