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

Python 3中JSON dumps/loads将字典整数键转为字符串的问题问询

关于Python字典序列化反序列化后键类型变化的问题

这既不是你的理解有误,也不是Python 3本身的问题——核心原因出在你使用的序列化格式(比如JSON)的规则限制上。

为什么会出现键类型转换?

像JSON这种通用序列化格式,它的语法规则里明确规定:对象的键只能是字符串类型,并不支持整数、列表等其他类型作为键。而Python的字典则灵活得多,允许任何可哈希的类型(比如整数、字符串、元组等)作为键。

当你用json模块这类工具序列化Python字典时,库会自动将非字符串的键转换为字符串来符合JSON的规范;反序列化时,JSON对象的键只会被解析成字符串,于是就出现了你看到的整数键变成'0'、'1'的情况。举个实际代码例子:

import json

original_dict = {0: 'object0', 1: 'object2'}
# 序列化
json_str = json.dumps(original_dict)
print(json_str)  # 输出: {"0": "object0", "1": "object2"}
# 反序列化
result_dict = json.loads(json_str)
print(result_dict)  # 输出: {'0': 'object0', '1': 'object2'}

如何保留字典键的原始类型?

如果你需要完整保留Python字典的键类型,可以使用Python专属的序列化工具pickle。它是专门为Python对象设计的序列化机制,能精准保留对象的所有类型信息:

import pickle

original_dict = {0: 'object0', 1: 'object2'}
# 序列化(二进制格式)
pickle_bytes = pickle.dumps(original_dict)
# 反序列化
result_dict = pickle.loads(pickle_bytes)
print(result_dict)  # 输出: {0: 'object0', 1: 'object2'},和原字典完全一致

不过要注意,pickle的序列化结果是二进制的,只能在Python环境中反序列化,不具备JSON那样的跨语言通用性,所以需要根据你的实际使用场景来选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:25:21