You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Гыггыг Фидолобабович

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:38:39