【发布时间】:2014-05-04 21:36:44
【问题描述】:
我可以使用 np.savez 存储字典吗? 结果令人惊讶(至少对我而言),而且我找不到通过密钥取回数据的方法。
In [1]: a = {'0': {'A': array([1,2,3]), 'B': array([4,5,6])}}
In [2]: a
Out[2]: {'0': {'A': array([1, 2, 3]), 'B': array([4, 5, 6])}}
In [3]: np.savez('model.npz', **a)
In [4]: a = np.load('model.npz')
In [5]: a
Out[5]: <numpy.lib.npyio.NpzFile at 0x7fc9f8acaad0>
In [6]: a['0']
Out[6]: array({'B': array([4, 5, 6]), 'A': array([1, 2, 3])}, dtype=object)
In [7]: a['0']['B']
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-c916b98771c9> in <module>()
----> 1 a['0']['B']
ValueError: field named B not found
In [8]: dict(a['0'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-d06b11e8a048> in <module>()
----> 1 dict(a['0'])
TypeError: iteration over a 0-d array
我不明白到底发生了什么。似乎我的数据变成了 0 维数组中的字典,让我无法通过按键取回我的数据。还是我错过了什么?
所以我的问题是:
- 这里发生了什么?如果我仍然可以通过密钥访问我的数据,该怎么做?
- 存储此类数据的最佳方式是什么? (以 str 为键,其他 dicts 为值的字典)
谢谢!
【问题讨论】:
标签: python arrays numpy dictionary save