从np.load()加载字典



我有一本字典,我把它保存到一个文件中。

a = {'a':1,'b':2,'c':3,'d':4}
with open('testdata.pickle', 'wb') as f:
np.save(f,a)

当我尝试加载它时,它返回为不可读

b = np.load('testdata.pickle',allow_pickle=True)
print(b)       #{'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(type(b)) #<class 'numpy.ndarray'>
print(b.shape) #()
print(len(b))  #Traceback (most recent call last):
#File "<stdin>", line 1, in <module>
#TypeError: len() of unsized object

我怎样才能访问这本字典?

尝试直接访问字典也失败。

>>> b['a']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

As juanpa。arrivillaga说,我不应该使用np。save/load。泡菜。倾倒和腌制。负载更好

with open('testdata.pickle', 'wb') as f:
pickle.dump(a, f)

b = pickle.load(open('testdata.pickle','rb'))
print(b) #{'a': 1, 'b': 2, 'c': 3, 'd': 4}

当您执行numpy.load()时,并且您希望将项目存储在该文件中,则需要使用.item()。在本例中,您需要b.item()

这是因为numpy将字典存储为数组。将字典保存为numpy对象,默认情况下是数组。你可以使用:

d = b.ravel()[0]

从数组中取出字典。然后可以使用兼容的字典操作。

但是如果你主要是保存和加载字典,我建议你使用pickle。

最新更新