Функция Python для получения записей о совпадениях и ошибкахPython

Программы на Python
Anonymous
Функция Python для получения записей о совпадениях и ошибках

Сообщение Anonymous »

У меня есть файл json следующего формата:

Код: Выделить всё

[
{
"type": "BEGIN",
"id": "XYZ123"
},
{
"type": "END",
"id": "XYZ123",
},
{
"type": "BEGIN",
"id": "XYZ456"
},
{
"type": "END",
"id": "XYZ987"
},
{
"type": "END",
"id": "XYZ456"
},
{
"type": "BEGIN",
"id": "XYZ789"
},
{
"type": "",
"id": "XYZ345"
}

]
Мне нужно вывести 2 файла:
valid_records.lst:

Код: Выделить всё

    "id": "XYZ123"
"id": "XYZ456"
error_records.lst:

Код: Выделить всё

    "id": "XYZ987"
"id": "XYZ789"
"id": "XYZ345"
т. е. допустимы блоки с типом BEGIN и END. Блоки типа BEGIN, END или none являются ошибками.
Это фрагмент кода, который я пробовал до сих пор: `

Код: Выделить всё

valid_records=[]
error_records=[]
for rec in records:
if rec.get("type") == "BEGIN":
for rec1 in records:

if rec['id'] == rec1['id'] and rec1.get("type") == "END":
valid_records.append(rec1)
print("valid id : ", rec1['id'])

elif rec['id'] == rec1['id'] and rec1.get("type") != "END":
print("ignore, duplicate")
else:
error_records.append(rec1)
print("error id : ", rec1['id'])

Это правильно печатает действительные идентификаторы (те, у которых есть BEGIN и END). Но когда создаются записи об ошибках, они также включают идентификаторы, определенные ранее как действительные. Кроме того, я не уверен, как его закодировать, чтобы захватить те идентификаторы, у которых только что есть BEGIN, END или нет.

Подробнее здесь: https://stackoverflow.com/questions/787 ... or-records

Вернуться в «Python»