def recursively_save_dict_contents_to_group(h5file, path, dic):
    """
    ....
    """
    reconstruction_flags = {}
    # reconstruction_key_flags = {}
    for key, item in dic.items():
        if type(key) is not str:
            # import pickle
            # key = pickle.dumps(key).decode("ascii")
            import json
            key = json.dumps(key)

            reconstruction_flags[path + key + "_key_/"] = "json_key"
        if item is None:
            import json
            jitem = json.dumps(item)
            h5file[path + key] = jitem
            reconstruction_flags[path + key + "_typ_/"] = "json_value"
        elif isinstance(item, (np.ndarray, np.int64, np.float64, str, bytes)):
            h5file[path + key] = item
        elif isinstance(item, (float)):
            h5file[path + key] = item
            reconstruction_flags[path + key + "_typ_/"] = "float"
        elif isinstance(item, (int)):
            h5file[path + key] = item
            reconstruction_flags[path + key + "_typ_/"] = "int"
        elif isinstance(item, dict):
            rf = recursively_save_dict_contents_to_group(h5file, path + key + '/', item)
            reconstruction_flags.update(rf)
            # reconstruction_key_flags.update(rkf)
        elif isinstance(item, list):
            # i = iter(item)
            item_dict = dict(zip(range(len(item)), item))
            wholekey = path + key + "_typ_/"
            reconstruction_flags[wholekey] = "list"
            rf = recursively_save_dict_contents_to_group(h5file, path + key + '/', item_dict)
            reconstruction_flags.update(rf)
            # reconstruction_key_flags.update(rkf)
        elif isinstance(item, tuple):
            # i = iter(item)
            item_dict = dict(zip(range(len(item)), item))
            wholekey = path + key + "_typ_/"
            reconstruction_flags[wholekey] = "tuple"
            rf = recursively_save_dict_contents_to_group(h5file, path + key + '/', item_dict)
            reconstruction_flags.update(rf)
        else:
            logger.info("Saving type {} with json".format(type(item)))
            import json
            jitem = json.dumps(item)
            h5file[path + key] = jitem
            reconstruction_flags[path + key + "_typ_/"] = "json_value"
            # raise ValueError('Cannot save %s type'%type(item))
    return reconstruction_flags
def recursively_save_dict_contents_to_group ( h5file , path , dic ) : reconstruction_flags = { } for key , item in dic . items ( ) : if type ( key ) is not str : import json key = json . dumps ( key ) reconstruction_flags [ path + key + "_key_/" ] = "json_key" if item is None : import json jitem = json . dumps ( item ) h5file [ path + key ] = jitem reconstruction_flags [ path + key + "_typ_/" ] = "json_value" elif isinstance ( item , ( np . ndarray , np . int64 , np . float64 , str , bytes ) ) : h5file [ path + key ] = item elif isinstance ( item , ( float ) ) : h5file [ path + key ] = item reconstruction_flags [ path + key + "_typ_/" ] = "float" elif isinstance ( item , ( int ) ) : h5file [ path + key ] = item reconstruction_flags [ path + key + "_typ_/" ] = "int" elif isinstance ( item , dict ) : rf = recursively_save_dict_contents_to_group ( h5file , path + key + '/' , item ) reconstruction_flags . update ( rf ) elif isinstance ( item , list ) : item_dict = dict ( zip ( range ( len ( item ) ) , item ) ) wholekey = path + key + "_typ_/" reconstruction_flags [ wholekey ] = "list" rf = recursively_save_dict_contents_to_group ( h5file , path + key + '/' , item_dict ) reconstruction_flags . update ( rf ) elif isinstance ( item , tuple ) : item_dict = dict ( zip ( range ( len ( item ) ) , item ) ) wholekey = path + key + "_typ_/" reconstruction_flags [ wholekey ] = "tuple" rf = recursively_save_dict_contents_to_group ( h5file , path + key + '/' , item_dict ) reconstruction_flags . update ( rf ) else : logger . info ( "Saving type {} with json" . format ( type ( item ) ) ) import json jitem = json . dumps ( item ) h5file [ path + key ] = jitem reconstruction_flags [ path + key + "_typ_/" ] = "json_value" return reconstruction_flags
....