前言时刻
上午讲的好多呀,信息量有点大,次要讲字典
来来总结:
明天次要讲了字典的创立、增:setdefault、删:pop、del、改、查:get
以及dic.keys()、 dic.values()、 dic.items()
字典
字典的特点是由键值对组成,其中键是可哈希的,个别是int、str,而值能够是任意数据类型,不可哈希。长处是查问速度快,然而存储空间较大,典型的用空间复杂度换工夫。
从3.6X版本以来,字典默认有序,程序依照字典建设前后程序。
1、创立字典
# 1、最罕用dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18} # {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}# 2、拆包创立字典dic2 = dict((('name', 'come'), ('age', 18))) # {'name': 'come', 'age': 18}# 3、传入键值创立dic3 = dict(name="come", age=18) # {'name': 'come', 'age': 18}
2、增
1、罕用 有则批改,无则增加。
dic = {'name': 'come'}# 1、罕用 有则批改,无则增加dic['age'] = 18 # {'name': 'come', 'age': 18}dic['name'] = 'on' # {'name': 'on', 'age': 18}
2、setdefault 有则不变,无则增加。
dic = {'name': 'come'}# 2、setdefault 有则不变,无则增加dic.setdefault('hobby', '看电影') # {'name': 'on', 'age': 18, 'hobby': '看电影'}dic.setdefault('hobby', "美食") # {'name': 'on', 'age': 18, 'hobby': '看电影'}
3、删
1. pop 函数
dict.pop(key[,default])
- key: 要删除的键值
- default: 如果没有 key,返回 default 值
dic = {'name': 'come', 'hobby': [1, 2], 'age': 18}# 1、最罕用 pop ,按键删除。留神列表中pop是按索引删除dic.pop('hobby') # {'name': 'come', 'age': 18}# 2、若删除不存在的键,可增加第二个参数并返回。相似get用法res = dic.pop('address', "Sorry")print(res) # Sorry
2. del 函数
dic = {'name': 'come', 'age': 18}# 2、deldel dic['age'] # {'name': 'come'}print(dic)del dic['address'] # 间接报错
3. clear 清空
间接清空字典,但保留字典格局
dic = {'name': 'come', 'age': 18}dic.clear()
4、改
dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}# 1、dic['name'] = 'on'print(dic) # {'name': 'on', 'hobby': [1, 2, 3], 'age': 18}dic['hobby'].append(666)print(dic) # {'name': 'on', 'hobby': [1, 2, 3, 666], 'age': 18}
5、查
罕用 dic.get(key)
取得键值。
dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}# 1、最罕用 get dic.get('hobby') # [1, 2, 3]print(dic.get('address', "Sorry")) # Sorry# 2、索引型print(dic['name']) # comeprint(dic['address']) # 间接报错
6、键值对迭代器
dic.keys()
:获取到字典所有键的迭代器对象
dic.values()
:获取到字典所有值的迭代器对象
dic.items()
:获取到字典所有键和值元组的迭代器对象、
dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}# 1、print(dic.keys())print(dic.values())print(dic.items())# dict_keys(['name', 'hobby', 'age'])# dict_values(['come', [1, 2, 3], 18])# dict_items([('name', 'come'), ('hobby', [1, 2, 3]), ('age', 18)])# 2、例子2 迭代打印内容for key, value in dic.items(): print(f"键:{key} 值:{value}")"""键:name 值:come键:hobby 值:[1, 2, 3]键:age 值:18"""
Last、小试牛刀:面试题
例1:
dic = {'hobby': [1, 2, 3], 'age': 18}dic2 = dic.get('hobby')dic2.append(666)print(dic, dic2)# ????问打印dic dic2的后果是?# 1、{'hobby': [1, 2, 3, 666], 'age': 18} [1, 2, 3, 666]# 2、{'hobby': [1, 2, 3], 'age': 18} [1, 2, 3, 666]
答案是1,你写对了吗?可能你会纳闷了,为什么是 dic2 的追加一个值,而 dic 中也会变?
这就波及到深浅拷贝了,就像下面的 dic2 只是对键 "hobby" 的值援用,属于浅拷贝,并没有开拓本人的存储空间,说白了就是一个变量符号而已。当你批改 dic2 的值其实就是批改 dic 中的值,如果你只是想独自批改 dic2 的值,那就深度拷贝一下吧。
如:
import copy# 1、深度拷贝dic = {'hobby': [1, 2, 3], 'age': 18}dic3 = copy.deepcopy(dic.get('hobby'))dic3.append(666)print(dic) # {'hobby': [1, 2, 3], 'age': 18}print(dic3) # [1, 2, 3, 666]# 能够看到 dic 并没有被批改
总结
字典的内容还行,重要的是多练多总结,就这样,今天持续写。