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
目前你只產生一件事——整個列表。因此,由您的原始函數創建的迭代器將返回一個完整列表作為第一個元素,然后停止。
添加回答
舉報