recover dict from 0-d numpy array


What happened is that I (by mistake) saved a dictionary with the command (no error messages shown) and now I need to recover the data in the dictionary. When I load it with numpy.load() it has type (numpy.ndarray) and is 0-d, so it is not a dictionary any more and I can’t access the data in it, 0-d arrays are not index-able so doing something like

mydict = numpy.load('mydict')

doesn’t work. I also tried

recdict = dict(mydict)

but that didn’t work either.

Why numpy didn’t warn me when I saved the dictionary with

Is there a way to recover the data?

Thanks in advance!

Asked By: andres



Use mydict.item() to obtain the array element as a Python scalar.

>>> import numpy as np
>>>'/tmp/data.npy',{'a':'Hi Mom!'})
>>> x=np.load('/tmp/data.npy')
>>> x.item()
{'a': 'Hi Mom!'}
Answered By: unutbu

0-d arrays can be indexed using the empty tuple:

>>> import numpy as np
>>> x = np.array({'x': 1})
>>> x
array({'x': 1}, dtype=object)
>>> x[()]
{'x': 1}
>>> type(x[()])
<type 'dict'>
Answered By: Robert Kern

It’s a way to recover the dict type data that using 'allow_pickle=True' and '.tolist()'.

I hope it will help you.'mydict.npy', org_dict)

# load & convert type to dict
mydict = numpy.load('mydict.npy', allow_pickle=True)
re_dict = mydict.tolist()

print('re_dict :', type(re_dict), re_dict)   # 're_dict' is '<type dict>' 
Answered By: WangSung
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.