Python / 字典dict和json的区别

记录一次了解模糊的地方。
文章肯定还有缺陷、错误,欢迎指正,以免误人子弟,也可以让我发现不足,先在此谢过了!哈哈

Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

Dict:
是Python中常用的映射数据类型
Dict格式:
存储键值对{key:value},键必须是唯一的,但值则不必。键和值可以是双引号,也可以是单引号
Dict键:
必须是不可变的,如字符串,数字或元组。
Dict值:
可以取任何数据类型,

JSON:
指的是 JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式
JSON格式:
存储键值对{key:value},名称/值对包括字段名称(在双引号中)
JSON值可以是:
    数字(整数或浮点数)
    字符串(在双引号中)
    逻辑值(true 或 false)
    数组(在中括号中)
    对象(在大括号中)
    null

区别:
0:Python 的字典是一种数据结构,JSON 是一种数据传输格式。
   Json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征,JSON是纯文本的,无法直接操作。
   Dict 是字典本身是一个完整的数据结构,实现了一切自身该有的算法。
1:Json格式的数据,在python中以字符串形式呈现
2:Json中的空置为 null,字典中的空值为 None
3:Json中除数字外,所有的key和value都是字符串,而且一定要用双引号**加粗样式**括起来,
   Json中的key不论是数字还是字符串都要用双引号括起来(key可以重复)
   python中的字典key为数字时用不用引号括起来都可以(key不能重复)
4:Json里面类似Dict里面的键可以重复,转换成字典之后,后面的会将前面的覆盖,因为Dict里面的键不能重复
5:Dict 里可以嵌套tuple, Json里只有array。 json.dumps({1:2}) 的结果是 {“1”:2}; json.dumps((1,2)) 的结果是[1,2]
   Json key name 必须是字符串, python 是hashable, {(1,2):1} 在python里是合法的,因为tuple是hashable ,
   但列表则不行,type;{[1,2]:1} 在python里TypeError: unhashable “list”, 验证键值不可变
   

class C:
    def __init__(self):
        self.a = 1
        self.b = 2
def fun():
    pass

d = {'a': 1, (1, 2): 'tuple', 3: {3: 2}, 3: '重复的key会覆盖前面的值'}  # {'a': 1, (1, 2): 'tuple', 3: '重复的key会覆盖前面的值'}
d = {[1, 2]:"键值必须是不可变的"}    # TypeError: unhashable type: 'list'
d = {{1, 2}: "键值必须是不可变的"}   # TypeError: unhashable type: 'set'
d = {{1: 2}: "键值必须是不可变的"}   # TypeError: unhashable type: 'dict'
d = {1: ''}     # {1: ''}
d = {1: None}   # {1: None}
d = {1: True}   # {1: True}
d = {1: object} # {1: <class 'object'>}
d = {1, C()}    # {1, <__main__.C object at 0x0000000001DC92E8>} <class '__main__.C'>
d = {1, fun()}  # {1, None} <class 'NoneType'>


# 将json字符串转换成由字典组成的列表
# 注意:
# 1:json里面的空为 null,python里面的空为None
# 2:json里面类似dict里面的键可以重复,转换成字典之后后面的会将前面的覆盖,因为dict里面的键不能重复
# 将json转换成字典,注:json格式中的外面一定要加单引号,因为json格式的数据表现形式是字符串
json_to_dict = '{"1":"null","2":null,"3":10001,"3":9999}'    # {'1': 'null', '2': None, '3': 9999}

参考:
https://www.cnblogs.com/dazhuangzhuang/p/12068475.html
https://www.runoob.com/python3/python3-dictionary.html
https://www.runoob.com/json/json-tutorial.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值