python day05笔记
day05内容大纲
- 字典的初识
- 字典的使用(增删改查)
- 字典的嵌套
昨日内容回顾
-
列表:容器型数据类型,可以承载大量的数据,有序的数据
-
增:
- append 追加
- insert 插入
- extend 迭代着追加
-
删:
- pop 按照索引删除,有返回值,默认删除最后一个
- remove 按照元素删除
- clear 清空列表
- del 索引,切片(步长)
-
改
- l1[1] = '大壮'
- l1[1:3] = 'asdasd
- l1[1:4:2]' = '太白
-
查:索引,切片(步长)
-
-
元组:只读列表(),拆包
-
range:看作:可以自己控制范围的数字列表,但是它不是列表
-
l1 = range(5) print(l1[1:3]) # range(1, 3) print(l1[-1]) # 4 print(range(1, 5, -1)) # 没值
-
今日内容
1.字典的初识
-
why:
- 列表可以存储大量的数据,数据之间的关联性不强
- ['太白', 18, '男', '大壮', 3, '男']
- 列表的查询速度比较慢
- 列表可以存储大量的数据,数据之间的关联性不强
-
what:容器型数据类型:dict
-
how:
-
数据类型的分类(可变与不可变):
-
可变(不可哈希)的数据类型:list dict set
-
l1 = [1, 2, 3] l1.append(666) print(l1)
-
-
不可变(可哈希)的数据类型:str bool int tuple
-
s = 'alex' s2 = s.upper() print(s, s2) # 对原对象没有任何改变 i = 100 i = 101 i = 102 # 只改变i的指向,100、101不会消失,都会在内存中占用空间
-
-
-
字典:{}括起来,以键值对形式存储的容器型数据类型
-
# 键值对: # 酒店: # 键:房间号,0~99 # 值:房间:里面放什么数据都可以 dic = {'太白': {'name': '太白金星', 'age': 18, 'sex': '男'}, 'python22期':['朱光亚', '大壮', '雪飞', '岑哥'], }
-
-
键必须是不可变的数据类型:str int (bool tuple几乎不用), 还是唯一的
-
值可以是任意数据类型,对象
-
字典在3.5版本之前(包括3.5)是无序的
-
字典3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的
-
字典3.7x以后都是有序的
-
字典的优点:查询速度非常快,存储关联性的数据
-
字典的缺点:以空间换时间
-
-
字典的创建方式:
-
# 方式一:dict() 一个元组里几个小元组,分别是键值对 dic = dict((('one', 1), ('two', 2), ('three', 3))) print(dic) -
# 方式二: dic = dict(one=1, two=2, three=3) print(dic) -
# 方式三: dic = dict({'one': 1, 'two': 2, 'three': 3}) print(dic)
-
-
验证列表的合法性
-
# 验证字典的合法性: dic = {[1, 2, 3]: 'alex', 1: 666} # 列表不能当键 print(dic) # 键要唯一 dic = {1: 'alex', 1: '太白', 2: 'wusir'} print(dic) # 不会报错,会覆盖
2.字典的增删改查
-
-
增:
-
直接增加:有则改之,无则增加
-
dic = {'name': '太白', 'age': 18} # 直接增加 有则改之,无则增加 dic['sex'] = '男' print(dic) dic['age'] = 23 # 会覆盖之前的age # 改 print(dic)
-
-
setdefault:有则不变,无则增加
-
dic = {'name': '太白', 'age': 18} # setdefault 有则不变,无则增加 dic.setdefault('pig') print(dic) dic.setdefault('hobby', '球类运动') print(dic) dic.setdefault('age', 45) print(dic) #age值不变
-
-
删
-
pop:按照键去删除键值对
-
dic = {'name': '太白', 'age': 18} # pop 按照键去删除键值对 # 设置第二个参数,无论字典中有无此键都不会报错,并且返回此值 ret = dic.pop('age') print(ret) print(dic) ret = dic.pop('hobby', '没有此键') print(ret)
-
-
clear
-
dic = {'name': '太白', 'age': 18} # clear 清空 dic.clear() print(dic)
-
-
del
-
dic = {'name': '太白', 'age': 18} del dic['age'] print(dic)
-
-
-
改
-
键值对改
-
dic = {'name': '太白', 'age': 18} # 改 dic['name'] = 'alex' print(dic)
-
-
-
查
-
直接查(不可取,如没有此键会报错)
-
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']} print(dic['hobby_list']) # 不可取,如果没有会报错
-
-
get() 可以设置返回值
-
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']} l1 = dic.get('hobby_list') l2 = dic.get('hobby_list1', '没有此键') # 可以设置返回值 print(l1) print(l2)
-
-
三个特殊的:keys() values() items()
-
keys()
-
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']} # keys print(dic.keys()) # 可以转化成列表 print(list(dic.keys())) for key in dic.keys(): print(key) for key in dic: # 也是获得键,和上着一样 print(key)
-
-
values()
-
# values print(dic.values()) print(list(dic.values())) for value in dic.values(): print(value)
-
-
items() 可以进行拆包
-
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']} # items # 会返回元组类型 print(dic.items()) print(list(dic.items())) for keys, values in dic.items(): # 进行拆包 print(keys, values) # 练习 a = 18, b = 12,用一行将其互换 a = 18 b = 12 a, b = b, a print(a, b)
-
-
-
-
练习
-
dic =
-
dic = {'k1': 'v1', 'k2': 'v2', 'k3': [11, 22, 33]}-
请在字典中添加一个键值对,'k4': 'v4',输出添加后的字典
-
dic.setdefault('k4', 'v4') print(dic) -
请修改字典中'k1'对应的值为'alex',输出修改后的字典
-
dic['k1'] = 'alex' print(dic) -
请在k3对应的值后追加一个元素44,输出修改后的字典
-
dic['k3'].append(44) print(dic) # 或者 l1 = dic.get('k3') l1.append(44) print(dic) -
请在k3对应的值的第一个位置插入元素18,输出修改后的字典
-
dic['k3'].insert(0, 18) print(dic)
-
-
-
3.字典的嵌套
-
练习一
-
dic = { 'name': '汪峰', 'age': 48, 'wife': [{'name': '国际章', 'age': 38}], 'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'} }-
1.获取汪峰的名字
-
print(dic['name']) # 或者 print(dic.get('name'))
-
-
2.获取这个字典:
-
l1 = dic.get('wife') print(l1)
-
-
3.获取汪峰妻子的名字
-
l2 = l1[0].get('name') print(l2)
-
-
4.获取汪峰的第三个孩子名字
-
print(dic['children']['girl_three'])
-
-
-
练习2
-
1.将name对应的列表追加一个元素'wusir'
-
dic1.get('name').append('wusir') print(dic1)
-
-
2.将name对应的列表中的alex首字母大写
-
dic1.get('name')[0] = dic1.get('name')[0].title() print(dic1)
-
-
3.oldboy对应的字典加一个键值对'老男孩', 'linux'
-
dic1['oldboy']['老男孩'] = 'linux' print(dic1)
-
-
4.将oldboy对应的字典中的alex对应的列表中的python2删除
-
dic1['oldboy']['alex'].pop(1) print(dic1)
-
-
今日总结
- 字典:查询速度快,数据的关联性强
- 键:不可变的数据类型,唯一
- 值:任意的数据类型,对象
- 增删改查(全部要会)
- 字典的嵌套
浙公网安备 33010602011771号