TypeError: 'generator' objet n'a pas d'attribut '__getitem__'
J'ai écrit une fonction génératrice qui doit renvoyer un dictionnaire. cependant lorsque j'essaie d'imprimer un domaine que 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']
De quoi vous attendiez-vous à
oui @MartijinPieters
L'appel d'une fonction de générateur produit de l'objet du générateur, et non pas la valeur suivante à partir de ce générateur. Créer le générateur à la fois, les stocker quelque part, puis d'utiliser ce générateur pour produire des valeurs (comme hspandher montre dans leur réponse).
row2
à contenir; la première ligne de la DictReader()
?oui @MartijinPieters
L'appel d'une fonction de générateur produit de l'objet du générateur, et non pas la valeur suivante à partir de ce générateur. Créer le générateur à la fois, les stocker quelque part, puis d'utiliser ce générateur pour produire des valeurs (comme hspandher montre dans leur réponse).
OriginalL'auteur MAS | 2015-06-15
Vous devez vous connecter pour publier un commentaire.
Générateur retourne un itérateur, vous explicitement besoins à l'appel suivant.
Votre dernière ligne de code doit être quelque chose comme -
Idéalement, nous utilisons les itérateurs dans une boucle, ce qui automatiquement fait la même chose pour nous.
OriginalL'auteur hspandher
Générateurs sont nécessairement itérateurs , pas iterables. Iterables contenir
__item__()
et__getitem__()
méthodes, tandis que les itérateurs contenirnext()
/__next__()
méthode (version de python 2.x/3.x).OriginalL'auteur Reza Saidafkan