numpy数组转JSON文件报错:int对象无get属性,求函数改写方案
解决AttributeError: 'int' object has no attribute 'get'问题
错误原因分析
先看你遇到的错误:
AttributeError: 'int' object has no attribute 'get'
这个问题出在save_output函数的sorted排序逻辑里——你把遍历到的每个x当成了字典,调用x.get("idx")来获取id,但实际上x是numpy.int16类型的数值,根本没有get方法。
为什么会这样?因为你把预测数组转成DataFrame后,直接把DataFrame传给了save_output,但DataFrame的默认遍历对象是列名(单列场景下遍历到的就是单个数值),不是你期望的带id的字典结构,自然就找不到get属性了。
你的核心需求是:给形如[1,0,1...0,0,1]的预测数组每个元素添加id,然后保存为JSON文件。下面给你两种可行的解决方案:
方案1:直接生成带id的字典列表(更简洁)
不用绕DataFrame,直接遍历预测数组生成带id的字典,再写入JSON:
import json import numpy as np # 假设这是你的numpy.int16预测数组 predictions = np.array([1, 0, 1, 0, 0, 1], dtype=np.int16) def save_output(data, path): with open(path, mode="w") as file: # 按id排序(如果id是顺序生成的,这一步可以省略) for line in sorted(data, key=lambda x: x["idx"]): file.write(f"{json.dumps(line, ensure_ascii=False)}\n") # 生成带id的字典列表,id从1开始(可根据需求改成从0开始) data_with_ids = [{"idx": i+1, "prediction": int(val)} for i, val in enumerate(predictions)] # 调用函数保存 save_output(data_with_ids, "predictions.json")
方案2:基于你原有的DataFrame代码修改
如果你一定要用pandas处理,可以先给DataFrame添加id列,再转成字典列表:
import json import pandas as pd import numpy as np predictions = np.array([1, 0, 1, 0, 0, 1], dtype=np.int16) # 转成DataFrame并添加id列 df = pd.DataFrame({"prediction": predictions}) df["idx"] = df.index + 1 # id从1开始计数 def save_output(data, path): with open(path, mode="w") as file: for line in sorted(data, key=lambda x: x["idx"]): file.write(f"{json.dumps(line, ensure_ascii=False)}\n") # 把DataFrame转成字典列表 data_with_ids = df.to_dict("records") # 保存文件 save_output(data_with_ids, "predictions.json")
补充说明
- 两种方案生成的JSON文件每行都是一个带
idx和prediction的JSON对象,符合你的需求。 - 如果你的id不需要排序(因为生成时已经是顺序的),可以去掉
sorted那一步,提升效率。
内容的提问来源于stack exchange,提问作者Гыггыг Фидолобабович
相关产品推荐
相关产品推荐

