我有一个多级嵌套字典,每当字典中有type
个键时,就try 添加一个键required
.
Code:
def add_recursively(val):
if 'type' in val and val['type'] != 'object':
val['required'] = False
return val
elif 'type' in val and val['type'] == 'object' and 'object_schema' in val:
return add_recursively(val['object_schema'])
else:
val['required'] = False
return val
new_data = {}
for key, value in data.items():
if value['type'] == 'object' and 'object_schema' in value:
new_data[key] = add_recursively(value)
else:
value['required'] = False
new_data[key] = value
Input data:
data = {'key1': {'description': 'Configuration for OpenID', 'type': 'boolean'},
'key2': {'default': {'enabled': True, 'logging_percent': 100},
'object_schema': {'enabled': {'default': True, 'type': 'boolean'},
'logging_percent': {'default': 100, 'type': 'float'},
'nested_key': {'default': {'new_enable': True, 'new_precent': 100},
'object_schema': {'new_enable': {'default': True, 'type': 'boolean'},
'new_precent': {'default': 100, 'type': 'float'}},
'type': 'object'}},
'type': 'object'}}
Output data:
{'key1': {'description': 'Configuration for OpenID',
'required': False,
'type': 'boolean'},
'key2': {'enabled': {'default': True, 'type': 'boolean'},
'logging_percent': {'default': 100, 'type': 'float'},
'nested_key': {'default': {'new_enable': True, 'new_precent': 100},
'object_schema': {'new_enable': {'default': True, 'type': 'boolean'},
'new_precent': {'default': 100, 'type': 'float'}},
'type': 'object'},
'required': False}}
Expected output:
{'key1': {
'required': False,
'description': 'Configuration for OpenID',
'type': 'boolean'},
'key2': {
'required': False,
'enabled': {'required': False, 'default': True, 'type': 'boolean'},
'logging_percent': {'required': False, 'default': 100, 'type': 'float'},
'nested_key': {'default': {'new_enable': True, 'new_precent': 100},
'object_schema': {'new_enable': {'required': False, 'default': True, 'type': 'boolean'},
'new_precent': {'required': False, 'default': 100, 'type': 'float'}},
'type': 'object'},
}}