Как я могу не индексировать список значений уменьшения?

Я использую комбинирование в Mapper в задании Map Reduce через модуль Python mrjob. Поскольку я написал функцию mapper_final, которая выдает одну пару, я уверен, что моим редукторам выдается только одна пара ключ-значение.

Однако моя функция сокращения ошибочна:

  def reducer(self, key, occurrences):
    '''
    Calculates the final value.
    '''
    yield 'Final Value: ', occurrences[0] / 2

Ошибка читается

File "calculateFinalValue.py", line 354, in reducer
    yield 'Final Value: ', occurrences[0] / 2
TypeError: 'generator' object has no attribute '__getitem__'

Почему я не могу индексировать в occurrences? В этом списке должна быть только одна пара, верно?


person dangerChihuahua007    schedule 23.09.2012    source источник


Ответы (1)


occurrences — это не list, это generator. Если вам нужен list, вам нужно собрать результаты генератора в список. Что-то вроде:

list_occurrences = [ occ for occ in occurrences ]

or

list_occurrences = list(occurrences)

yield 'Final Value: ', list_occurrences[0] / 2

Или вы можете получить первое значение вхождений с помощью occurrences.next():

yield 'Final Value: ', occurrences.next() / 2
person LSerni    schedule 23.09.2012