Я бы сказал, что без дополнительных данных следующий подход более или менее экспериментален, но может быть хорошей отправной точкойВы можете найти нужный ключ (487
в вашем случае) и последовательные фигурные скобки:
import re
from ast import literal_eval
file = """
['720',
'717',
'"Diagnostic"',
'487',
'"{""status"": ""active""',
'""division_type"": ""Organisation""}"']"""
rx = re.compile(r'(?P<key>487)[^{}]+(?P<content>\{[^{}]+\})')
for m in rx.finditer(file):
content = re.sub(r"""'?"+'?""", '"', m.group('content'))
d = {m.group('key'): literal_eval(content)}
print(d)
Это дает
{'487': {'status': 'active', 'division_type': 'Organisation'}}
Или, в более общем смысле, как функцию:
def make_dict(string, key):
rx = re.compile(r'(?P<key>' + key + ')[^{}]+(?P<content>\{[^{}]+\})')
for m in rx.finditer(string):
content = re.sub(r"""'?"+'?""", '"', m.group('content'))
yield {m.group('key'): literal_eval(content)}
for d in make_dict(file, '487'):
print(d)
В общем, исправьте формат ввода файла!