@classmethod<EOL><INDENT>def parse_load_fk(cls, data: Dict[str, List[Dict[str, object]]]) -> Dict[str, List[Dict[str, object]]]:<DEDENT>
default_value_dict = {'<STR_LIT>': None, '<STR_LIT>': None, '<STR_LIT>': None, '<STR_LIT>': None}<EOL>def value_normalize_dict(value):<EOL><INDENT>def check(k, v):<EOL><INDENT>if k == '<STR_LIT>': return isinstance(v, str)<EOL>if k == '<STR_LIT>': return isinstance(v, str)<EOL>if k == '<STR_LIT>': return isinstance(v, str)<EOL>if k == '<STR_LIT>': return isinstance(v, dict)<EOL><DEDENT>valid = {k: v for k, v in value.items() if check(k, v)}<EOL>if not valid: return default_value_dict.copy()<EOL>if '<STR_LIT>' in valid and valid['<STR_LIT>']:<EOL><INDENT>valid['<STR_LIT>'] = cls.parse_load_fk(valid['<STR_LIT>'])<EOL><DEDENT>for k, v in default_value_dict.items():<EOL><INDENT>valid.setdefault(k, v)<EOL><DEDENT>return valid<EOL><DEDENT>def value_normalize(value, no_list=True):<EOL><INDENT>if value is None:<EOL><INDENT>return default_value_dict.copy()<EOL><DEDENT>elif not no_list and isinstance(value, List):<EOL><INDENT>return list(map(value_normalize, value))<EOL><DEDENT>elif isinstance(value, str):<EOL><INDENT>val = default_value_dict.copy()<EOL>val['<STR_LIT>'] = value<EOL>return val<EOL><DEDENT>elif isinstance(value, Dict):<EOL><INDENT>return value_normalize_dict(value)<EOL><DEDENT>else:<EOL><INDENT>raise InvalidParams('<STR_LIT>' % value)<EOL><DEDENT><DEDENT>new_data = {}<EOL>if not isinstance(data, dict):<EOL><INDENT>raise InvalidParams('<STR_LIT>' % data)<EOL><DEDENT>for k, v in data.items():<EOL><INDENT>nv = value_normalize(v, False)<EOL>new_data[k] = nv if isinstance(nv, List) else [nv]<EOL><DEDENT>return new_data<EOL>
:param data:{
    <column>: role,
    <column2>: role,
    <column>: {
        'role': role,
        'loadfk': { ... },
    },
:return: {
    <column>: {
        'role': role,
    },
    ...
    <column3>: {
        'role': role,
        'loadfk': { ... },
    },
}