在python中将迭代器拆分为两个后续迭代器

在python中将迭代器拆分为两个后续迭代器,python,iterator,Python,Iterator,我有一个迭代器,它生成一个包含多个数据字段的字典。是否有一种方法可以将此数据流拆分为以下两个迭代器,每个迭代器仅具有前面流式字典的特定数据字段 class Splitter(IteratorBase): def __init__(self, iterable): super().__init__(iterable) def __iter__(self): for pt in self.iterable: yield pt[

我有一个迭代器,它生成一个包含多个数据字段的字典。是否有一种方法可以将此数据流拆分为以下两个迭代器,每个迭代器仅具有前面流式字典的特定数据字段

class Splitter(IteratorBase):
    def __init__(self, iterable):
        super().__init__(iterable)

    def __iter__(self):
        for pt in self.iterable:
            yield pt["field1"], pt["field2"]
不起作用,因为这只会生成包含两个字段的元组,您可以使用:

导入itertools
#为某些数据生成迭代器
数据=[{'field1':1,'field2':2},{'field1':3,'field2':4}]
it=国际热核实验堆(数据)
#从第一个迭代器中生成两个迭代器
it1,it2=itertools.tee(it)
#对字段1使用第一个迭代器
it1=(it1中元素的元素['field1']
#对field2使用第二个迭代器
it2=(it2中元素的元素['field2']
#打印每个迭代器的元素
打印(*it1)
# 1 3
打印(*it2)
# 2 4

重复使用这样的变量名会让人困惑。谢谢,但这会遍历数据收集两次还是一次?我之所以这样问是因为efficacyOne遍历,但是一个迭代器所拉的元素必须缓存在内存中,直到另一个迭代器也使用它为止。@CD86迭代器只被遍历一次(请注意,这适用于任何迭代器,许多迭代器不能被遍历两次)。在内部,
tee
根据需要读取元素,并将它们存储在内部队列中,直到所有迭代器都通过它(请参见中的说明)。我忘了提到以下代码期望生成的迭代器是迭代器的类型或子类。在删除
BaseIterator
,将
\uuuuu init\uuuuu
更改为具有
self.iterable=iterable
,并将数据作为
[{“field1”:1,“field2”:2},{“field1”:3,“field2”给出后,我运行代码没有问题:4}]
。在foo:中为A,b使用一个简单的
foo=Splitter(data)
很好。@FelipeFaria此代码生成一个元组迭代器,而不是一对单独的迭代器。(公平地说,这与
itertools.tee
没有太大区别,尽管元组迭代器只能在
tee
迭代器之间访问。)