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

如何将键为tuple类型的dict写入.txt文件?

问题原因

JSON 标准规定对象的键必须为字符串类型,Python 的 json 模块对 int、float、bool 等基础类型键做了兼容处理,会自动将其转为字符串后序列化,但不支持 tuple 类型作为键,因此抛出对应 TypeError。
注意:你的代码中使用了Python内置类型名 dict 作为变量名,会覆盖内置的字典类,后续开发建议修改为自定义名称,避免命名冲突。

解决方案

方案1:使用pickle模块序列化(推荐用于Python内部数据存储)

如果你的数据仅在Python环境中读写,不需要跨语言兼容,pickle是最简单的方案,原生支持所有Python内置类型的序列化:

写入代码

import pickle

my_dict = {(1, 1): 11, (2, 2): 22, (3, 3): 33, (4, 4): 44, (5, 5): 55, (6, 6): 66, (7, 7): 77, (8, 8): 88, (9, 9): 99}

# 需使用二进制读写模式
with open('dict.pkl', 'wb') as file:
    pickle.dump(my_dict, file)

读取代码

import pickle

with open('dict.pkl', 'rb') as file:
    loaded_dict = pickle.load(file)

# 验证读取结果:输出 {(1, 1): 11, (2, 2): 22, (3, 3): 33, (4, 4): 44, (5, 5): 55, (6, 6): 66, (7, 7): 77, (8, 8): 88, (9, 9): 99}
print(loaded_dict)

方案2:预处理键转为字符串,兼容标准JSON格式

如果需要存储为可读的纯文本、符合JSON标准,可在序列化时将tuple键转为字符串,反序列化时再还原为tuple:

写入代码

import json

my_dict = {(1, 1): 11, (2, 2): 22, (3, 3): 33, (4, 4): 44, (5, 5): 55, (6, 6): 66, (7, 7): 77, (8, 8): 88, (9, 9): 99}

# 预处理:将tuple类型的键转为字符串
serializable_dict = {str(k): v for k, v in my_dict.items()}

with open('dict.txt', 'w') as file:
    file.write(json.dumps(serializable_dict))

读取代码

import json

with open('dict.txt', 'r') as file:
    loaded_serializable = json.load(file)

# 方式1:使用eval还原tuple键,仅适用于可信数据源
loaded_dict = {eval(k): v for k, v in loaded_serializable.items()}

# 方式2:手动解析还原tuple键,适用于不可信数据源,更安全
# loaded_dict = {tuple(map(int, k.strip('()').split(', '))): v for k, v in loaded_serializable.items()}

print(loaded_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:00