J'ai écrit une fonction génératrice qui devrait retourner un dictionnaire. cependant, lorsque j'essaie d'imprimer un champ, j'obtiens l'erreur suivante
print row2['SearchDate']
TypeError: 'generator' object has no attribute '__getitem__'
C'est mon code
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']
Le générateur renvoie un itérateur, vous devez explicitement appeler ensuite dessus.
Votre dernière ligne de code devrait ressembler à -
rows_generator = genSearch(SearchInfo)
row2 = next(rows_generator, None)
print row2['SearchDate']
Idéalement, nous utilisons des itérateurs en boucle, ce qui fait automatiquement la même chose pour nous.
Les générateurs sont nécessairement itérateurs, pas iterables. Les itérables contiennent les méthodes __item__()
et __getitem__()
, tandis que les itérateurs contiennent la méthode next()
/__next__()
(version python 2.x/3.x).