У меня есть следующий объект:
d={
'CollectionTitleIDs': {
'852070#TVEpisode': '12',
'852063#TVEpisode': '4',
'852067#TVEpisode': '9'
},
'ReleaseYear': '2005',
'TVSeriesID': '5638#TVSeries'
}
Я бы хотел сгладить его, чтобы получить следующий вывод:
{
'CollectionTitleIDs': [
{"_Key": "852070#TVEpisode", "Value": "12"},
{"_Key": "852063#TVEpisode", "Value": "4"},
{"_Key": "852067#TVEpisode", "Value": "9"}
]
'ReleaseYear': '2005',
'TVSeriesID': '5638#TVSeries'
}
Другими словами, если значение ключа равноdict, чтобы вставить ключи этого dict в поле «_Key» и значение этого в поле «Value».
У меня были трудности с рекурсией.И в настоящее время у меня есть что-то вроде этого:
То, что у меня сейчас есть:
def flatten_obj(obj, FLAT_OBJ=None):
if FLAT_OBJ is None: FLAT_OBJ = OrderedDict()
if isinstance(obj, list):
return [flatten_obj(l, FLAT_OBJ=FLAT_OBJ) for l in obj]
elif not isinstance(obj, dict):
return obj
else:
for key in list(obj.keys()):
val = get_sub_object_from_path(obj, key)
if isinstance(val, dict):
FLAT_OBJ[key] = [{'_Key': subkey, 'Value': flatten_obj(subval)} for subkey, subval in val.items()]
elif isinstance(val, list):
FLAT_OBJ[key] = flatten_obj(val, FLAT_OBJ=FLAT_OBJ)
else:
FLAT_OBJ[key] = val
return FLAT_OBJ
Обратите внимание, что у приведенного выше есть один уровень рекурсии, но возможно, что «значение» будет иметь (кроме того) вложенный объект, и в этом случае мы хотим снова извлечь _Key, значение.