我想把字典转储到一个json文件中,然后加载它,这样我就可以使用它了。
dic = {}
for n in range(1,10):
if n%2==0:
dic[n] = n**2
else:
dic[str(n)] = n**2
print(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}所有的键都变成了字符串。在这种简单的情况下,它是可以避免的,但是在复杂的情况下我应该怎么做呢?
感谢您的帮助。
发布于 2020-06-05 22:15:31
JSON规范要求所有键都是字符串。这在Python中并非如此,在Python中,不是字符串的对象可以是字典中的键。
发布于 2020-06-05 22:17:50
在JSON中,键必须是字符串。
因此,一旦您将字典转储为JSON,就没有办法返回它,因为当您再次加载它时它是原样的。这类信息已不再为人所知。
如果需要,您可以检查此问题以了解其他复杂情况。它是关于使用pickle而不是JSON:https://stackoverflow.com/a/17328255/8528141
发布于 2020-06-05 22:31:10
正如其他答案所暗示的那样,JSON确实要求所有键仅为字符串。因此,如果将字典存储为JSON格式,那么所有的键都将变成字符串,并且在加载回字典时,您将获得字符串形式的键。
如果您想以相同的格式存储和加载字典,那么您可以将key_type与字典一起保存,或者您可以考虑使用pickle库来存储和加载Python数据结构,而不需要更改其中的任何内容。
https://stackoverflow.com/questions/62217284
复制相似问题