我不清楚你真正想要完成什么。 (我怀疑你的字典有七个以上的零。否则,HDF5 存储你的数据是多余的。)如果你有很多非常大的字典,最好将数据转换为 NumPy 数组,然后 1)创建和使用data= 加载数据集或2)使用适当的dtype 创建数据集,然后填充。您可以创建具有混合数据类型的数据集,这在之前的解决方案中没有解决。如果这些情况不适用,您可能希望将字典保存为属性。属性可以与组、数据集或文件对象本身相关联。哪个最好取决于您的要求。
我写了一个简短的例子来展示如何加载字典键/值对作为标记到组的属性名称/值对。对于这个例子,我假设字典有一个名称键和组名进行关联。对于数据集或文件对象,该过程几乎相同(只需更改对象引用)。
import h5py
def load_dict_to_attr(h5f, thisdict) :
if 'name' not in thisdict:
print('Dictionary missing name key. Skipping function.')
return
dname = thisdict.get('name')
if dname in h5f:
print('Group:' + dname + ' exists. Skipping function.')
return
else:
grp = h5f.create_group(dname)
for key, val in thisdict.items():
grp.attrs[key] = val
###########################################
def get_grp_attrs(name, node) :
grp_dict = {}
for k in node.attrs.keys():
grp_dict[k]= node.attrs[k]
print (grp_dict)
###########################################
car1 = dict( name='my_car', brand='Ford', model='Mustang', year=1964,
engine='V6', disp=260, units='cu.in' )
car2 = dict( name='your_car', brand='Chevy', model='Camaro', year=1969,
engine='I6', disp=250, units='cu.in' )
car3 = dict( name='dads_car', brand='Mercedes', model='350SL', year=1972,
engine='V8', disp=4520, units='cc' )
car4 = dict( name='moms_car', brand='Plymouth', model='Voyager', year=1989,
engine='V6', disp=289, units='cu.in' )
a_truck = dict( brand='Dodge', model='RAM', year=1984,
engine='V8', disp=359, units='cu.in' )
garage = dict(my_car=car1,
your_car=car2,
dads_car=car3,
moms_car=car4,
a_truck=a_truck )
with h5py.File('SO_61226773.h5','w') as h5w:
for car in garage:
print ('\nLoading dictionary:', car)
load_dict_to_attr(h5w, garage.get(car))
with h5py.File('SO_61226773.h5','r') as h5r:
print ('\nReading dictionaries from Group attributes:')
h5r.visititems (get_grp_attrs)