У меня есть схема, и у меня есть список вложенных полей, которые должны быть в ней.
В основном то, что у меня есть:
[{'name': 'a', 'type': 'string'},
{'name': 'b', 'type': 'string'},
{'name': 'c', 'type': 'string'},
{'name': 'd', 'type': 'string'},
{'name': 'e', 'type': 'string'},
{'name': 'attr', 'type': 'string'},
{'name': 'f', 'type': 'string'},
{'name': 'g', 'type': 'string'},
{'name': 'h', 'type': 'string'},
{'name': 'i', 'type': 'string'},
{'name': 'j', 'type': 'string'},
{'name': 'k', 'type': 'string'}]
Но когда "name" равно "attr", я хочу добавить к нему другую пару k-v словаря с ключом в качестве "полей" и значением в качестве другого вложенного списка словарей в том же формате, что и выше. Это будет выглядеть так:
[{'name': 'a', 'type': 'string'},
{'name': 'b', 'type': 'string'},
{'name': 'c', 'type': 'string'},
{'name': 'd', 'type': 'string'},
{'name': 'e', 'type': 'string'},
{'name': 'attr', 'type': 'string', 'fields': [{'name': 'aa',....}],
{'name': 'f', 'type': 'string'},
{'name': 'g', 'type': 'string'},
{'name': 'h', 'type': 'string'},
{'name': 'i', 'type': 'string'},
{'name': 'j', 'type': 'string'},
{'name': 'k', 'type': 'string'}]
Ниже master_schema_set и nestedschemaset были просто наборами, которые я конвертировал.
finalschema = [{'name':l} for l in master_schema_set]
finalschemanested = [{'name':l} for l in nestedschemaset]
for i in finalschema:
i.update({"type":'string'}) #all types will always be string
for item,val in i.items():
if val == 'attr':
i.update({'fields':finalschemanested})
Выполнение этого дает мне ошибку «словарь изменил размер во время итерации», но в конечном итоге это то, что я хочу. Какой лучший способ добиться этого?