Day 05 字典的初识:字典的使用:字典的嵌套
01 今日内容大纲
- 字典的初识
- 字典的使用(增删改查)
- 字典的嵌套
02 内容回顾以及作业讲解
- 列表:容器型数据类型,可以承载大量的数据,有序的数据
-
增:
- append 追加
- insert 插入
- extend 迭代这追加
-
删
- pop 按索引删除 有返回值,默认删最后一个
- remove 按照元素删除
- clear 清空列表
- del 索引,切片,步长
-
改
-
l1[1] = '大壮'
-
l1[1:3] = 'faasddfa'
l1 = ['太白', '女神', '吴老师', 'xiao', '闫龙']
l1[1:3] = 'faasddfa'
print(l1)#['太白', 'f', 'a', 'a', 's', 'd', 'd', 'f', 'a', 'xiao', '闫龙']
-
l1[1:4:2] = '太白'
-
-
查:索引,切片,for 循环
-
- 元组:只读列表,(),拆包
- range:可以看作自己控制范围的数字列表 可以索引
03 具体内容
- 字典的初识:
-
why:
- 列表可以存储大量的数据,数据之间的关联性不强
- ['太白', 18, '男', '大壮', 3, '男']
- 列表的查询速度比较慢
- 列表可以存储大量的数据,数据之间的关联性不强
-
what:容器型数据类型:dict
-
how:
- 数据类型的分类(可变不可变):
- 可变(不可哈希)的数据类型:list dict set
- 不可变(可哈希)的数据类型:str bool int tuple
- 字典:{}括起来。以键值对的形式储存的容器型数据类型:
dic = {'太白': {'name':'太白金星','age':18,'sex':'男'},'python':['asda','asdas','asdaf','asdasdafgg']} - 键必须是不可变的数据类型(可哈希):int, str,(bool和tuple几乎不用) 唯一的。
- 值可以是任意数据类型,对象
- 字典3.5x版本之前是无序的
- 字典3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的。
- 字典3.7x以后都是有序的
- 字典的优点:查阅速度非常快,存储关联性的数据
- 字典的缺点:以空间换时间。
- 数据类型的分类(可变不可变):
-
字典的创建方式:
#面试会考
# 方式一:
dic = dict((('one',1),('two',2),('three',3)))
print(dic) ## 方式二: 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 = {[1,2,3]:'alex',1:666} #键要为不可变的数据类型
print(dic) #报错dic = {1:'alex',1:'太白',3:'wusir'} print(dic) #{1: '太白', 3: 'wusir'}
-
字典的增删改查
-
增
dic =# 直接增加 有则改之,无则增加 dic['sex'] = '男' dic['age'] = 23 # 改 print(dic) #setdefault 有则不变,无则增加 dic.setdefault('hobby') #无则增加 dic.setdefault('hobby','球类运动') #无则增加 dic.setdefault('age',45) #有则不变 print(dic)
-
删
dic =# pop 按照键删除键值对,有返回值 *** # 设置第二个参数,则无论字典有无此键都不会报错 dic.pop('age') ret = dic.pop('age') #ret 返回值 ret = dic.pop('hobby','没有此键') print(ret) print(dic) # clear 清空 ** dic.clear() print(dic) #{} # del ** del dic['age'] del dic['age1'] #报错 print(dic)
-
改
dic =dic['name'] = 'alex' print(dic)
-
查 get 获取(建议)
dic =l1 = dic.get('hobby_list') #['直男', '钢管', '开车'] l2 = dic.get('hobby_list111','没有此键') #没有此键 #可以设置返回值 print(l1) print(l2)
-
查(不建议)
dic =print(dic['hobby_list']) #['直男', '钢管', '开车'] print(dic['hobby_list1']) #报错 KeyError: 'hobby_list1'
-
三个特殊的 keys() values() items() ***
dic =1.#keys() print(dic.keys(),type(dic.keys())) #dict_keys(['name', 'age', 'hobby_list']) <class 'dict_keys'> #所有的键 #可以转化成列表 print(list(dic.keys())) #['name', 'age', 'hobby_list'] for i in list(dic.keys()): print(i) ''' name age hobby_list ''' 2.#values print(list(dic.values())) #['太白', 18, ['直男', '钢管', '开车']] for i in list(dic.values()): print(i) ''' 太白 18 ['直男', '钢管', '开车'] ''' 3.#items print(dic.items()) #dict_items([('name', '太白'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])]) print(list(dic.items())) #[('name', '太白'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])] for i in list(dic.items()): print(i) ''' ('name', '太白') ('age', 18) ('hobby_list', ['直男', '钢管', '开车']) ''' for key,value in dic.items(): print(key,value) ''' name 太白 age 18 hobby_list ['直男', '钢管', '开车'] ''' a,b = ('name','太白') print(a,b) #name 太白 #面试题: a = 18 b = 12 #如何一行程序让a,b互换值 a,b = b,a #答案 print(a,b)
-
-
相关练习题
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
# 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic.setdefault('K4','V4')
dic['k4'] ='v4'
print(dic)# 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典 dic['k1'] = 'alex' print(dic) # 请在k3对应的值中追加一个元素 44,输出修改后的字典 dic.get('k3').append(44) print(dic) # 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典 dic.get('k3').insert(-4,18) print(dic)
-
字典的嵌套
dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38},],
'children': {'girl_first': '小苹果','girl_second': '小怡','girl_three': '顶顶'}
}# 1. 获取汪峰的名字。 print(dic.get('name')) # 2.获取这个字典:{'name':'国际章','age':38}。 print(dic.get('wife')[0]) # 3. 获取汪峰妻子的名字。 print(dic.get('wife')[0].get('name')) # 4. 获取汪峰的第三个孩子名字。 print(dic.get('children').get('girl_three')) dic1 = { 'name' : ['alex',2,3,5], 'job' : 'teacher', 'oldboy' : {'alex':['python1','python2',100]} } # 1.将name对应的列表追加一个元素'wusir' dic1.get('name').append('wusir') print(dic1) # 2.将name对应的列表中的alex字母大写 dic1.get('name')[0] = dic1.get('name')[0].upper() print(dic1) # 3.oldboy对应的字典加一个键值对'老男孩','linux' dic1.get('oldboy').setdefault('老男孩','linux') print(dic1) # 4.将oldboy对应的字典中的alex对应的列表中的python2删除 del dic1.get('oldboy').get('alex')[1] print(dic1)
-
04 今日总结
- 字典: 查询速度快,数据的关联性强
- 键不可变数据类型/可希哈(str int)唯一。
- 值:任意数据类型,对象。
- 增删改查(全部会默写)***
- 字典的嵌套***
05 明日预习内容
- 明天讲理论性偏多: id is == 小数据池,集合。