У меня есть многослойный, вложенный python словарь. Я пытаюсь преобразовать этот словарь в строку, которая выглядит как человеческий python код. Я искал stackoverflow для решения, но не смог найти подходящее - пожалуйста, укажите одно, если оно отвечает на мой вопрос.
Примечания:
1) Некоторые имена ключей повторяются на разных глубинах в вложенном словаре
2) Сам словарь может изменять форму, содержимое и, возможно, даже имена ключей, поэтому этот сценарий должен работать для разных случаев
3) Чтобы упростить эту проблему, я преобразовал все вложенные списки в словари - ключи для этих словарей - числа, преобразованные в строковый тип - однако решение, которое использует вложенные списки, хорошо
Цель состоит в том, чтобы преобразовать:
sample_dictionary = {
'id' : '123',
'type' : 'testing',
'records' : {
'0' : {
'record_id' : '324',
'record_type' : 'test1',
},
'1' : {
'record_id' : '121',
'record_type' : 'test2',
'sub_records' : {
'0' : {
'sub_record_id' : 'sub_578',
'sub_record_type' : 'sub_test',
},
},
},
},
}
в строку:
sample_dictionary[id] = 123
sample_dictionary[type] = testing
sample_dictionary[records][0][record_id] = 324
sample_dictionary[records][0][record_type] = test1
sample_dictionary[records][1][record_id] = 121
sample_dictionary[records][1][record_id] = test2
sample_dictionary[records][1][sub_records][0][sub_record_id] = sub_578
sample_dictionary[records][1][sub_records][0][sub_record_type] = sub_test
Я создал эту рекурсивную функцию, которая приближается, но неправильно включает дополнительные ключи:
def FindValues(dictionary, my_keys=''):
for key, value in dictionary.items():
my_keys += '[' + key + ']'
if type(value) is dict:
FindValues(value, my_keys)
else:
result = 'sample_dictionary' + my_keys + ' = ' + value
print(result)
FindValues(sample_dictionary)
, что приводит к:
sample_dictionary[id] = 123
sample_dictionary[id][type] = testing
sample_dictionary[id][type][records][0][record_id] = 324
sample_dictionary[id][type][records][0][record_id][record_type] = test1
sample_dictionary[id][type][records][0][1][record_id] = 121
sample_dictionary[id][type][records][0][1][record_id][record_type] = test2
sample_dictionary[id][type][records][0][1][record_id][record_type][sub_records][0][sub_record_id] = sub_578
sample_dictionary[id][type][records][0][1][record_id][record_type][sub_records][0][sub_record_id][sub_record_type] = sub_test