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

Python加载JSON后字典键为字符串非整型,如何转换为整型键?

问题原因

JSON 标准规定对象的键必须为字符串类型,因此 Python 内置的 json 模块解析 JSON 数据时,会默认将所有键转换为字符串,哪怕原始 JSON 中的键是数字样式,解析后也会变成字符串类型,这就是你用整数索引访问抛出 KeyError: 0 的原因。

解决方案

方案1:加载完成后手动转换键类型

适合只需要转换单层级字典、或者需要自定义转换规则的场景:
首先新增一个键转换函数:

def convert_str_keys_to_int(input_dict):
    processed_dict = {}
    for key, value in input_dict.items():
        try:
            # 尝试将键转换为整数,转换成功则用整型作为新键
            int_key = int(key)
            processed_dict[int_key] = value
        except (ValueError, TypeError):
            # 无法转换为整数的键保留原始类型
            processed_dict[key] = value
    return processed_dict

在加载数据后调用该函数即可:

data = load_data("file.json")["teks"]
# 转换字符串键为整型键
data = convert_str_keys_to_int(data)
# 现在可以正常用整数索引访问
print(data[0])

方案2:加载时自动转换(更便捷)

通过 json.load 的 object_hook 参数,在解析 JSON 的过程中自动完成键转换,适配嵌套字典场景:
直接修改你的 load_data 函数即可:

def load_data(file):
    # 解析时的钩子函数,自动转换可转为整数的字符串键
    def key_convert_hook(dct):
        return {
            int(k) if isinstance(k, str) and k.lstrip('-').isdigit() else k: v 
            for k, v in dct.items()
        }
    with open(file, "r", encoding="utf-8") as f:
        data = json.load(f, object_hook=key_convert_hook)
    return data

修改后无需额外处理,加载后的数据直接支持整数索引访问:

data = load_data("file.json")["teks"]
print(data[0])

注意事项

如果你的数据中存在本身就是字符串形式的数字键(比如键"01"本身不希望被转为整数1),可以调整转换函数的判断逻辑,过滤不符合格式要求的键即可。

内容的提问来源于stack exchange,提问作者ddinfiwis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:09:04