2 回答

TA贡献1844条经验 获得超8个赞
你产生了一个列表,所以你不能使用dict.pop. 在您的情况下,您应该这样编写代码:
def load_json(file_name):
with open(filename,'r') as open_file:
for row in json.load(open_file)['rows']:
yield row
这意味着,一旦你加载了一个新行,你将跳转到其他函数来处理该值。然后你可以在下面弹出。
for row in load_json(file_name):
print(row.pop('state'))
但是,还是要告诉你,这种方式并不能优化你的代码,因为json.load会一次性读取整个文件,所以还是会消耗很大的内存...
你说你用的是 elasticsearch,那你最好用 pagination 本身,而不是 generator。

TA贡献1799条经验 获得超9个赞
您很可能希望遍历行并像这样一一输出它们:
filename='test.json'
def load_json(filename):
with open(filename,'r') as open_file:
for r in json.load(open_file)['rows']:
yield r
目前你只产生一件事——整个列表。因此,由您的原始函数创建的迭代器将返回一个完整列表作为第一个元素,然后停止。
添加回答
举报