Разделение итератора на два последующих итератора в python - PullRequest
4 голосов
/ 16 января 2020

У меня есть итератор, который выдает словарь с несколькими полями данных. Есть ли способ разделить этот поток данных на два следующих итератора, каждый из которых содержит только определенное поле данных предыдущего потокового словаря?

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

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

не работает, потому что это просто дает кортежи с обоими полями

1 Ответ

4 голосов
/ 16 января 2020

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...