将 netsted 字典保存到 hdf 或 netCDF

save a netsted dictionary to hdf or netCDF

一般情况下,将字典保存到hdf或netCDF是很直接的。例如 。 但是如何处理嵌套字典。例如下面的字典:

test = {'temp': {'unit': 'K', 'data': [273.,298.,315.]}, 'press': {'unit': 'hPa', 'data': [800.,900.,1000.]}}

请注意,嵌套可以进行到多层。所以我需要 netCDF 或 hdf

组中的子组

也许类似此功能的东西可以提供帮助。我在这里为你的例子定制了它,但如果你能提供一个属性字典并使其工作类似于 'data',它会更好。我正在使用 xarray 来演示如何获取数据集变量,但您可以将这个想法转移到您选择的工具中。

import xarray as xr

def create_variable(dataset, var, test, dimensions):

    data = test[var]['data'] 
    attrs = {'unit':test[var]['unit']} 


    v = xr.Variable(dimensions, data, attrs=attrs)
    dataset[var] = v

    return var

没关系,我找到答案了

将 numpy 导入为 np 导入 h5py

def dict2hdf5(filename, dic):
    with h5py.File(filename, 'w') as h5file:
        recursive_dict2hdf5(h5file, '/', dic)


def recursive_dict2hdf5(h5file, path, dic):
    for key, item in dic.items():
        if not isinstance(key, str):
            key = str(key)
        if isinstance(item, (np.ndarray, np.int64, np.float64, str, bytes)):
            h5file[path + key] = item
        elif isinstance(item, list):
            h5file[path + key] = np.array(item)
        elif isinstance(item, dict):
            recursive_dict2hdf5(h5file, path + key + '/',
                                item)
        else:
            raise ValueError('Cannot save %s type' % type(item))