为了账号安全,请及时绑定邮箱和手机立即绑定

将字典键传递给 json.dump 和 json.load 后会发生变化

将字典键传递给 json.dump 和 json.load 后会发生变化

天涯尽头无女友 2022-12-27 16:33:03
我想将一个字典转储到一个 json 文件中,然后加载它以便我使用它。dic = {}for n in range(1,10):    if n%2==0:        dic[n] = n**2    else:        dic[str(n)] = n**2print(dic)打印输出是:{'1': 1, 2: 4, '3': 9, 4: 16, '5': 25, 6: 36, '7': 49, 8: 64, '9': 81}这是我想要的结果但是当我json.dump和json.load它...with open("myfile.json","w") as fp:    json.dump(dic,fp)with open("myfile.json") as fq:    newdic=json.load(fq)print(newdic)输出是:{'1': 1, '2': 4, '3': 9, '4': 16, '5': 25, '6': 36, '7': 49, '8': 64, '9': 81}所有的键都变成了字符串。在这种简单的情况下是可以避免的,但是在复杂的情况下我该怎么办呢?任何帮助表示赞赏。
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

JSON 规范要求所有键都是字符串。在 Python 中情况并非如此,其中不是字符串的对象可以是字典中的键。



查看完整回答
反对 回复 2022-12-27
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

在 JSON 中,键必须是字符串。

因此,一旦将字典转储为 JSON,就无法在再次加载时按原样返回。这种信息已经不为人知。

如果需要,您可以针对其他复杂情况检查此问题。它是关于使用pickle而不是JSON: https ://stackoverflow.com/a/17328255/8528141


查看完整回答
反对 回复 2022-12-27
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

正如其他答案所暗示的那样,JSON 确实要求所有键都只能是字符串。因此,如果您将字典存储为 JSON 格式,那么您所有的键都会变成字符串,并且在加载字典时您会得到字符串中的键。

如果你想以相同的格式存储和加载 dict,那么你可以将 key_type 与 dict 一起保存,或者你可以考虑pickle存储和加载 Python 数据结构的库而不改变其中的任何内容。


查看完整回答
反对 回复 2022-12-27
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信