python - 将嵌套字典中的 numpy 数组转换为列表,同时保留字典结构

标签 python json numpy dictionary

我正在寻找一种方法,如何将包含 numpy 数组的嵌套字典转储到 JSON 文件中(以将我的实验和数据的完整日志保存在一个地方)。

我的字典看起来是这样的(结构可能比显示的代码更嵌套):

import numpy as np
data = {'foo': {'bar': np.array([1, 2, 3])}, 'goo': np.array([3,5,7]),'fur': {'dur': {'mur': np.array([7,5,8])}}}

此时此代码失败,因为 numpy 数组不可序列化:

with open('data.txt','w') as fl:
    json.dump(data,fl)

我知道可以使用 tolist() 函数,但我不知道如何在保留数据结构和将 np.arrays 交换为列表的同时遍历字典。

我尝试使用递归从字典中获取单个值,但我不知道如何“重建字典”。我目前的代码(没有 json 转储):

import numpy as np

def dict_walk(data):
    for k, v in data.iteritems():
        if isinstance(v, dict):
            dict_walk(v)
        else:
            l = v.tolist()
            print l

data = {'foo': {'bar': np.array([1, 2, 3])}, 'goo': np.array([3,5,7]),'fur': {'dur': {'mur': np.array([7,5,8])}}}
dict_walk(data)       

最佳答案

你可以给json.dump一个default函数; JSON 不知道如何处理的任何数据类型都会调用它:

def default(obj):
    if isinstance(obj, np.ndarray):
        return obj.tolist()
    raise TypeError('Not serializable')

with open('data.txt','w') as fl:
    json.dump(data, fl, default=default)

关于python - 将嵌套字典中的 numpy 数组转换为列表,同时保留字典结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876180/

相关文章:

python - groupby 上的 pandas concat 数组

java.io.IOException : unexpected end of stream on okhttp3. 地址@e31061fc

python - 如何将项目添加到numpy数组中

python - Numpy:具有不同值的索引样本组

python - 在 Django 中使用交互式控件制作 Bokeh 图

python - 使用 Python Selenium 访问 HTML 中的嵌套元素

python - 为什么 python 和我的网络浏览器对同一链接显示不同的代码?

java - Jersey 自定义 JSON 响应

Javascript 自动加载图像脚本不起作用

python - 切片 3d numpy 数组返回奇怪的形状