python - 在Python中将迭代器拆分为两个连续的迭代器

标签 python iterator

我有一个迭代器,它生成一个包含多个数据字段的字典。有没有办法将此数据流拆分为两个后续迭代器,每个迭代器仅包含前面流字典的某个数据字段?

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

    def __iter__(self):
        for pt in self.iterable:
            yield pt["field1"], pt["field2"]

不起作用,因为这只会产生具有两个字段的元组

最佳答案

您可以使用itertools.tee :

import itertools

# Make iterator for some data
data = [{'field1': 1, 'field2': 2}, {'field1': 3, 'field2': 4}]
it = iter(data)
# Make two iterators out of the first one
it1, it2 = itertools.tee(it)
# Use first iterator for field1
it1 = (elem['field1'] for elem in it1)
# Use second iterator for field2
it2 = (elem['field2'] for elem in it2)
# Print elements of each iterator
print(*it1)
# 1 3
print(*it2)
# 2 4

关于python - 在Python中将迭代器拆分为两个连续的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59775745/

相关文章:

c++ - multimap 只显示两个第一个元素

Python Semaphore 似乎在 Google Colab 中不起作用

python - 如何使用 CSV 中的列追加目录中的所有文件?

python - “str_iterator”对象不可调用

c++ - 同一个类中的迭代器和 const_iterator 的问题

c++ - 为什么我会收到错误 'vector iterators incompatible' ?

Python正则表达式并多次查找

python - 如何连接到QSqlDriver通知信号

Python CGI如何安全地保存请求的信息?

java - 迭代器添加到数组列表的并发修改异常