#python #json #for-loop
#python #json #for-цикл
Вопрос:
Я пытаюсь сохранить определенный файл JSON, который находится в каждой вложенной папке в корневой папке.
Мне удалось это сделать, и теперь у меня есть этот список:
list_1
который дает:
['C:\Users\user\Downloads\problem00001\ground-truth.json',
'C:\Users\user\Downloads\problem00002\ground-truth.json',
'C:\Users\user\Downloads\problem00003\ground-truth.json']
Теперь я пытаюсь открыть каждый из этих JSON
файлов внутри списка, но сохраняется только последний.
Цель состоит в том, чтобы сохранить их все вместе, а не только последний.
Вот что я попробовал:
for k in list_1:
with open(k, 'r') as f:
gt = {}
gt2=[]
for i in json.load(f)['ground_truth']:
#print(i) <--- This here prints exactly what I need
gt[i['unknown-text']] = i['true-author']
gt2.append(gt)
Я предполагаю, что на каждой итерации он заменяется, но не уверен.
Ответ №1:
Вы повторно инициализируете список gt2 в каждом цикле for. Следовательно, это должно быть вне цикла.
gt2=[]
for k in list_1:
with open(k, 'r') as f:
gt = {}
for i in json.load(f)['ground_truth']:
#print(i) <--- This here prints exactly what I need
gt[i['unknown-text']] = i['true-author']
gt2.append(gt)
Комментарии:
1. Вы думаете, что gt = {} не является необходимым?
2. Я не знаю варианта использования, но, похоже, в этом нет необходимости. Вы можете напрямую использовать gt2.append(i[‘true-author’]) сразу после строки print (i), но я думаю, вам нужна некоторая уникальность.
Ответ №2:
Вы перезаписываете локальную gt2=[]
переменную каждый раз после чтения файла. Вы должны определить это перед повторением цикла list_1
как:
gt2 =[]
for k in list_1:
with open(k, 'r') as f:
gt = {}
for i in json.load(f)['ground_truth']:
#print(i) <--- This here prints exactly what I need
gt[i['unknown-text']] = i['true-author']
gt2.append(gt)