Мне не ясно, чего вы действительно хотите достичь sh. (Я подозреваю, что в ваших словарях более семи нулей. В противном случае 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)