Jay*_*Jay -3 python dictionary
我有一个简单的函数来解析.csv,如下所示
def grabber3(datafile):
with open(datafile, 'rb') as f:
r =csv.DictReader(f)
for line in r:
del line['thisthing']
print line
Run Code Online (Sandbox Code Playgroud)
这样可以正确地打印每条dict线,大约50行,如
{'NetworkStatus': '1', 'ID': '1469'}
{'NetworkStatus': '1', 'ID': '1470'}
etc etc
Run Code Online (Sandbox Code Playgroud)
但是我想在调用函数时返回这个,所以我将print语句更改为return as
def grabber3(datafile):
with open(datafile, 'rb') as f:
r =csv.DictReader(f)
for line in r:
del line['thisthing']
return line
Run Code Online (Sandbox Code Playgroud)
但它只返回第一行
{'NetworkStatus': '1', 'ID': '1469'}
Run Code Online (Sandbox Code Playgroud)
如何返回循环/所有dict行的每一行而不是第一行?
这样做的有效方法是使用yield:
def grabber3(datafile):
with open(datafile, 'rb') as f:
r =csv.DictReader(f)
for line in r:
del line['thisthing']
yield line
Run Code Online (Sandbox Code Playgroud)
然后在调用此函数的代码中,您可以执行以下操作:
dict_generator = grabber3(a_file)
Run Code Online (Sandbox Code Playgroud)
然后迭代这个dict_generator:
for a_dict in dict_generator:
print a_dict
Run Code Online (Sandbox Code Playgroud)
更多关于yield和发电机在这里: