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”
必须使用边界符(双引号),但字典就无所谓了。
上面我们已经知道,字典的格式是dict
,json
的格式是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」。