1. ホーム
  2. python

[解決済み] TypeError: 'generator' オブジェクトには '__getitem__' という属性がありません。

2022-02-25 10:19:11

質問

辞書を返すべき生成関数を書きましたが、フィールドを印刷しようとすると、次のようなエラーが発生します。

print row2['SearchDate']
TypeError: 'generator' object has no attribute '__getitem__'

これは私のコードです

from csv import DictReader
import pandas as pd
import numpy as np


def genSearch(SearchInfo):
    for row2 in DictReader(open(SearchInfo)):
        yield row2

train = 'minitrain.csv'

SearchInfo = 'SearchInfo.csv'

row2 = {'SearchID': -1}

for row1 in DictReader(open(train)):
    if 'SearchID' in row1 and 'SearchID' in row2 and row1['SearchID'] == row2['SearchID']:
        x = deepcopy( row1 )
        #x['SearchDate'] = row2['percent']
        x.update(row2)    
        print 'new'
        print x
    else: 
        #call your generator
        row2 = genSearch(SearchInfo)
        print row2['SearchDate']

解決方法は?

Generator はイテレータを返すので、明示的に next を呼び出す必要がある。

最後の行は、次のようなものです。

rows_generator = genSearch(SearchInfo)
row2 = next(rows_generator, None)
print row2['SearchDate']

理想はループの中でイテレータを使うことで、自動的に同じことをやってくれることです。