字典的初识
-
WHY
- 列表可以存储大量的数据,但数据之间的关联性不强
- 列表的查询速度比较慢
-
WHAT 容器型数据类型:dict
-
HOW
-
数据类型的分类(可变与不可变):
-
可变(不可哈希)的数据类型:列表(list)、字典(dict)、集合(set)
-
不可变(可哈希)的数据类型:str、 bool、 int、 tuple(元组)
什么叫不可变:一旦定义了以上四种类型的变量,就会在内存中占用一段空间储存这个变量的值
不管是否重新赋值了变量,原来的内存中的空间始终占用,也就是重新赋值只是重新开了一块新的内存空间:
变量 操作 内存地址 str 赋值 地址1:"Murphy" 再次给str赋值 地址2:"Mike" 如上表,重新赋值后,内存中依然存在"Murphy"它并不会消失,变化的只是变量str的指向
-
-
字典: {}括起来,以键值对形式存储的容器型数据类型:
-
dic = { 'Murphy': {'name': '老杨', 'age': 18, 'sex': '男'}, 'Python学习': ['Murpht', '老杨', 'Mikie', '嘻嘻'] }
-
键,必须是不可变的数据类型:str,int,,,(bool, tuple,几乎没人用布尔值和元组当键)且是唯一的
-
# 验证字典的合法性: dic = {[1,2,3]:'murphy', 1 : 666} # 错误,不能用可变数据类型当‘键’(list) print(dic) dic = {1: 'M', 1: 'C', 2: 123} # 如果存在两个相同的键,那么后一个会覆盖前一个 所以键要唯一 print(dic) # {1: 'C', 2: 123}
-
值,可以是任意数据类型,对象
-
字典在3.5版本之前(包括3.5)是无序的。
-
字典在3.6X版本会按照初次建立字典的顺序排列,学术上不认为是有序的
-
字典在3.7版本以后都是有序的
-
字典的优点:查询速度非常快,存储有关联性的数据
-
字典的缺点:以空间换时间。
-
-
字典的创建方式:
-
# 方式一: dic = dict((('one', 1), ('two', 2), ('three', 3))) print(dic) # {'one': 1, 'two': 2, 'three': 3} # 方式二: dic = dict(one=1, two=2, three=3) print(dic) # {'one': 1, 'two': 2, 'three': 3} # 方式三(官方写法): dic = dict({'one': 1, 'two': 2, 'three': 3}) print(dic) # {'one': 1, 'two': 2, 'three': 3}
-
-
字典的增删改查
-
**增:1 直接增加(有则改之,无则增加);2 setdefault (有则不变,无则增加) **
dic = {'name': '老杨', 'age': 18} # 键值对: # 比如酒店:键:就像房间号一样 # 值:房间:里面放什么数据都行 # 字典的增删改查: # 增: # 直接增加(有则改之,无则增加) dic['sex'] = '男' print(dic) dic['age'] = 23 # 相当于改 print(dic) # setdefault 用这个方法只能新增,不能修改已有键值对(有则不变,无则增加) # dic.setdefault('hobby') # print(dic) # {'name': '老杨', 'age': 23, 'sex': '男', 'Murphy': None} dic.setdefault('hobby', 'python') print(dic) # {'name': '老杨', 'age': 23, 'sex': '男', 'Murphy': 'python'}
-
删:pop() clear() del
# pop 按照键去删除键值对,有返回值 # dic.pop('age') ret = dic.pop('age') print(ret) # 18 print(dic) # {'name': '老杨'}
# pop第二个用法,当给pop()设置第二个参数时,不论是否有这个键,都不会报错,并且把第二个值返回 ret = dic.pop('hobby', '没有这个键') print(ret) # 没有这个键 print(dic) # {'name': '老杨', 'age': 18}
# clear只是清空字典内容,不是删除字典 dic.clear() print(dic) #{}
# del 会报错不推荐使用 del dic['age'] # 正确写法 del dic['hobby'] # 错误写法,没有hobby这个键,会报错不推荐使用 print(dic)
-
改,直接改 update
-
查 按照键来查(不推荐,如果键不存在会报错), get()(推荐,如果键不存在会返回None)
dic = {'name': '老杨', 'age': 18, 'hobby_list': ['python', '姑娘', '摇滚']} print(dic['hobby_list']) print(dic['hobby_list1']) # 报错啦,不存在'hobby_list1'这个键
#get l1 = dic.get('hobby_list') l1 = dic.get('hobby_list1') # None print(l1)
-
-