我有两个空列表,它们稍后在我的代码中带有附加值;这是在Python 3.5中完成的:
times = []
amounts = []
取值后,列表如下:
times = [1, 2, 3, 4]
amounts = [12.34, 12.43, 87.65, 98.01]
我将这两个列表合并为一个字典:
data = dict(zip(times, amounts))
我需要序列化此字典以将其作为JSON文件输出,但是在打印字典时,我一直得到这个奇怪的输出:
{1: array([[12.34]], dtype=float32), 2: array([[12.43]], dtype=float32)}
我无法使用dict中的float dtype创建JSON文件。任何人都对如何将float32转换为JSON所需的字符串值有任何想法?
当我使用json.dumps时,我得到以下信息:
array([[12.34]], dtype=float32) is not JSON serializable
答案 0 :(得分:0)
有了您向我们展示的times
和amounts
,我做dumps
没问题:
In [140]: times
Out[140]: [1, 2, 3, 4]
In [141]: amounts
Out[141]: [12.34, 12.43, 87.65, 98.01]
In [142]: dd = dict(zip(times, amounts))
In [143]: dd
Out[143]: {1: 12.34, 2: 12.43, 3: 87.65, 4: 98.01}
In [144]: json.dumps(dd)
Out[144]: '{"1": 12.34, "2": 12.43, "3": 87.65, "4": 98.01}'
但是字典不会如您所显示的那样打印。为此,我必须将amounts
变成一个数组。
In [147]: arr = np.array(amounts,'float32')[:,None,None]
In [148]: arr.shape
Out[148]: (4, 1, 1)
In [149]: arr
Out[149]:
array([[[12.34]],
[[12.43]],
[[87.65]],
[[98.01]]], dtype=float32)
In [150]: dd = dict(zip(times, arr))
In [151]: print(dd)
{1: array([[12.34]], dtype=float32), 2: array([[12.43]], dtype=float32), 3: array([[87.65]], dtype=float32), 4: array([[98.01]], dtype=float32)}
这是不可序列化的-没有ndarray
(无需额外代码)
In [152]: json.dumps(dd)
--------------------------------------------------------------------------
TypeError: Object of type 'ndarray' is not JSON serializable