从0-d numpy数组恢复dict

时间:2011-12-02 19:31:25

标签: python dictionary load numpy save

发生的事情是我(错误地)使用命令numpy.save()保存了一个字典(没有显示错误消息),现在我需要恢复字典中的数据。当我用numpy.load()加载它时它有类型(numpy.ndarray)并且是0-d,所以它不再是字典而且我无法访问其中的数据,0-d数组是不能索引,所以做

之类的事情
mydict = numpy.load('mydict')
mydict[0]['some_key'] 

不起作用。我也试过

recdict = dict(mydict)

但这也不起作用。

当我用numpy.save()保存字典时,为什么numpy没有警告我?

有没有办法恢复数据?

提前致谢!

3 个答案:

答案 0 :(得分:67)

使用mydict.item()将数组元素作为Python标量获取。

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

答案 1 :(得分:23)

可以使用空元组索引0-d数组:

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

答案 2 :(得分:0)

这是一种使用 dict type'allow_pickle=True' 恢复 '.tolist()' 数据的方法。
希望能帮到你。

numpy.save('mydict.npy', org_dict)
#
mydict = numpy.load('mydict.npy', allow_pickle=True)

# convert type to dict from numpy.ndarray. _
recdict = mydict.tolist()       
print('recdict :', type(recdict), recdict)   # 'recdict' is '<type dict>'