首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将其传递给json.dump和json.load后,Dict键会更改

将其传递给json.dump和json.load后,Dict键会更改
EN

Stack Overflow用户
提问于 2020-06-05 22:09:13
回答 3查看 201关注 0票数 1

我想把字典转储到一个json文件中,然后加载它,这样我就可以使用它了。

代码语言:javascript
复制
dic = {}

for n in range(1,10):
    if n%2==0:
        dic[n] = n**2
    else:
        dic[str(n)] = n**2
print(dic)

打印输出为:

代码语言:javascript
复制
{'1': 1, 2: 4, '3': 9, 4: 16, '5': 25, 6: 36, '7': 49, 8: 64, '9': 81}

这是我想要的结果,但当我json.dump它和json.load它时,...

代码语言:javascript
复制
with open("myfile.json","w") as fp:
    json.dump(dic,fp)
with open("myfile.json") as fq:
    newdic=json.load(fq)

print(newdic)

输出为:

代码语言:javascript
复制
{'1': 1, '2': 4, '3': 9, '4': 16, '5': 25, '6': 36, '7': 49, '8': 64, '9': 81}

所有的键都变成了字符串。在这种简单的情况下,它是可以避免的,但是在复杂的情况下我应该怎么做呢?

感谢您的帮助。

EN

回答 3

Stack Overflow用户

发布于 2020-06-05 22:15:31

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

票数 2
EN

Stack Overflow用户

发布于 2020-06-05 22:17:50

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

因此,一旦您将字典转储为JSON,就没有办法返回它,因为当您再次加载它时它是原样的。这类信息已不再为人所知。

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

票数 1
EN

Stack Overflow用户

发布于 2020-06-05 22:31:10

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

如果您想以相同的格式存储和加载字典,那么您可以将key_type与字典一起保存,或者您可以考虑使用pickle库来存储和加载Python数据结构,而不需要更改其中的任何内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62217284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档