Python面试题系列之09 Python字典与json的异同?

Python面试题系列之09: Python字典与json的异同?

Question

Python字典json的异同?

知识点详解

dict 与 json 的异同

从形式来讲,这两者的确很像,都为key:value的形式。

dic = {'Name': 'Pythonista', 'ID': 91155859, 'Owner': 'MiracleYoung'}
j = {"Name": "Pythonista", "ID": 91155859, "Owner": "MiracleYoung"}

本质上来讲,字典是一种数据结构,json是一种格式。

print(type(dic), type(j))
>>> <class 'dict'> <class 'str'>

dict:是一个完整的数据结构,是对Hash Table这一数据结构的一种实现,是一套从存储到提取都封装好了的方案。它使用内置的哈希函数来规划key对应value的存储位置,从而获得O(1)的数据读取速度。
json:是一种数据格式,是具有一定规则的字符串,方便在不同平台上处理其中包含的数据。可以被解析成Python的dict或者其他形式。

字典有很多内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具备操作性,并且是格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,而且“key”必须使用边界符(双引号),但字典就无所谓了。

上面我们已经知道,字典的格式是dictjson的格式是str,在传输的时候用的是字符串,所以如果要传输字典内容,就需要先进行字典转json,接下来我们就来看看两者之间的转化。

dict 与 json 的互相转化

Python语言中,json数据与dict字典之间的转化是必不可少的操作。在Python中自带json库,可直接通过import json导入。

import json

json模块有4个方法:

  • loads():将json数据转化成dict数据
  • dumps():将dict数据转化成json数据
  • load():从json文件中读取数据,转成dict数据
  • dump():将dict数据转化成json数据后写入json文件
dumps方法

dict数据 >>> json数据

dic = {}
dic['Name'] = 'Pythonista'
dic['ID'] = 91155859
dic['Owner'] = 'MiracleYoung'

print(dic)  
>>> {'Name': 'Pythonista', 'ID': 91155859, 'Owner': 'MiracleYoung'}

j = json.dumps(dic)
print(j)
>>> {"Name": "Pythonista", "ID": 91155859, "Owner": "MiracleYoung"}

print(type(dic), type(j))
>>> <class 'dict'> <class 'str'>
loads方法

json数据 >>> dict数据

j = '{"Name": "Pythonista", "ID": 91155859, "Owner": "MiracleYoung"}'
dic = json.loads(j)

print(dic) 
>>> {'Name': 'Pythonista', 'ID': 91155859, 'Owner': 'MiracleYoung'}

print(type(j), type(dic))
>>> <class 'str'> <class 'dict'>
dump方法

dict数据 >>> json数据,并写入json文件

dic = {}
dic['Name'] = 'Pythonista'
dic['ID'] = 91155859
dic['Owner'] = 'MiracleYoung'

with open('pythonista.json', 'w') as f:
    json.dump(dic, f)

# 上述操作后,会在目录下生成一个 pythonista.json 的文件,文件内容是dict数据转成的json数据。
load方法

读取json文件 >>> dict数据

with open('pythonista.json', 'r') as f:
    dic = json.load(f)

print(dic) 
>>> {'Name': 'Pythonista', 'ID': 91155859, 'Owner': 'MiracleYoung'}

从上述的例子不难看出:json.dumps()/json.loads()用来编码和解码json字符串数据的;而json.dump()/ json.load()用来处理文件的。

Answer

Python的字典,是一种数据结构。JSON,是一种数据传输格式。

  • json,就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。
  • python的字典,其的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。

后记

读完本篇内容,想必大家对Python的字典json差异应该很清楚了吧?从本质上看差异就很容易抓住重点。好了,以上就是本篇全部内容。

备注:本篇首发于知识星球「人人都是Pythonista」。


文章作者: &娴敲棋子&
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 &娴敲棋子& !
评论
  目录