我想将一个字典转储到一个 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 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
在 JSON 中,键必须是字符串。
因此,一旦将字典转储为 JSON,就无法在再次加载时按原样返回。这种信息已经不为人知。
如果需要,您可以针对其他复杂情况检查此问题。它是关于使用pickle
而不是JSON
: https ://stackoverflow.com/a/17328255/8528141
慕丝7291255
TA贡献1859条经验 获得超6个赞
正如其他答案所暗示的那样,JSON 确实要求所有键都只能是字符串。因此,如果您将字典存储为 JSON 格式,那么您所有的键都会变成字符串,并且在加载字典时您会得到字符串中的键。
如果你想以相同的格式存储和加载 dict,那么你可以将 key_type 与 dict 一起保存,或者你可以考虑pickle
存储和加载 Python 数据结构的库而不改变其中的任何内容。
添加回答
举报
0/150
提交
取消