1. 字典的定义
字典是具有键值映射关系的一组无序数据组合,是Python中另一个非常有用的内置数据类型。 键值映射关系? 一一匹配的关系 key:value 无序数据组合? 没有索引值 标识符:{} 关键字:dict 元素:键值对的形式来存储key:value,如果有多个元素,元素之间用逗号隔开 key支持的数据类型:数字、字符串、元组; key必须是唯一的,并且是不可以修改的 value支持的数据类型:所有的Python数据类型 特点:无序可变
# 定义一个空字典
# 获取字典的长度 len()
d = {}
print(d,type(d),len(d))
# 定义一个非空字典
# 查看列表类型 type()
stu = {
'name':'zs',
'age':18,
'addr':'北京',
'class':211,
'age1':20 #如果key重复,则只会保留一个,并且后面的key的value会覆盖前面key的value
}
print(stu,type(stu),len(stu))
d2 = {
1:'zs',
3.14:'PI',
True:'布尔值',
'class':{'id':1001,'name':'zs'},
(1,2,3):['hello','vip','python'],
#[1,2,3]:['hello','vip','python'] #TypeError: unhashable type: 'list'
}
print(d2,type(d2),len(d2))
# 字典不支持加号拼接和乘号多次输出
print(stu + d2)
print(stu * 2)
2. 字典操作--查
字典取值,字典是根据key来进行取值,key是唯一 语法:字典名[key] 查看列表元组中的元素,索引值的方式取值
d1 = {'id':1001,
'name':'lisa',
'age':18,
'skill':['python','自动化测试','性能测试','接口测试'],
'hobby':('singing','swimming'),
'addr':{'company':'北京','local':'长沙'}}
# 字典中单个value的获取
print('lisa同学的技能:',d1['skill']) #KeyError: 'skill123'
print('lisa同学的年龄:',d1['age'])
# 嵌套字典、列表、元组元素值的获取 --》一层一层剖析 -->解题思路
print('lisa同学的居住地址:',d1['addr']['local'])
print('lisa同学的最后的2个技能:',d1['skill'][-2:])
print('lisa同学的姓名姓氏(li):',d1['name'][:2])
3. 字典操作----增
增加字典中的元素值 语法:字典名[不存在的key]=新值
# 从控制台接受输入的用户名和密码,并将数据添加在空字典中存储
d = {}
username = input('username:')
pwd = input('pwd:')
print('d结果:',d)
d['uname'] = username
print('添加username之后,d结果:',d)
d['passwd'] = pwd
print('添加pwd之后,d结果:',d)
# 在第一题的字典中的插入身份状态,status:1
d['status'] = 1
print('添加身份状态之后,d结果:',d)
4. 字典操作---删
删除字典中的元素值(一个键值对) pop()方法:通过key来进行删除,删除键值对,在删除字典时pop中必须要给定key值,不能为空 popitem()方法:删除字典中的最后一个键值对,然后获取到删除的这个键值的数据 clear()方法:清空字典 del 字典名[key]:通过key来进行删除,删除键值对
d4 = {'class':'1',
'teacher':['kate','aa'],
'vip':{1:'张三',2:'李四'},
'sub':('python'),
'des':'hahaha'}
# 删除元素class
# 找到这个键值对,再去加上del
del d4['class']
print(d4)
print(d4.pop('class'))
print(d4)
# 删除字典中的最后一个元素,并输出删除的键值对
print('原字典:',d4)
res = d4.popitem()
print('popitem字典:',d4)
print('========')
print('获取删除的键值对:',res,type(res))
# 清空字典
# d4.clear()
# print(d4)
5. 字典操作---改
修改字典中的元素值 语法:字典名[存在的key]=新值
d5 = {'class':'211',
'teacher':['muzi','aa'],
'grade':{1:'张三',2:'李四'},
'sub':('python'),
'des':'hahaha'}
# 将des的值修改为:备注信息
# 修改是一个操作,会在原字典上进行更改
print(d5)
d5['des'] = '备注信息'
print(d5)
# 嵌套修改:将vip中李四修改为lisa
# 拿到李四 # 再赋值
d5['grade'][2] = 'lisa'
print(d5)
# 嵌套删除,只删除teacher中的aa
# 1-teacher的value
res = d5['teacher']
print(res)
# 2-删除['muzi', 'aa']中的'aa'
res.pop()
print(res)
del d5['teacher'][-1]
print(d5)
6. 字典常用其他方法
字典名.items():返回可遍历的(键,值)元组数组 字典名.keys():返回一个字典所有的键,返回一个迭代器,可以使用 list() 来转换为列表 字典名.values():返回一个字典所有的值,返回一个迭代器,可以使用 list() 来转换为列表 字典名.copy():复制字典,生成一个新字典。列表也可以使用copy()方法来复制列表。 字典名.get(key,default):根据key去字典中获取对应的值,如果key不存在则返回给定的默认值,不会报错
d6 = {'class':'v211',
'teacher':['muzi','aa'],
'vip':{1:'张三',2:'李四'},
'sub':('python'),'des':'hahaha'}
# 输出所有的key值,可以用list()转换进行取值查看
print('输出所有的key值',d6.keys(),type(d6.keys()))
res = list(d6.keys())
print(res,type(res),res[0])
# 输出所有的values值,可以用list()转换进行取值查看
print('输出所有的values值',d6.values(),type(d6.values()))
res = list(d6.values())
print(res,type(res),res[1])
# 输出所有的(key,values)的值
print('输出所有的(key,values)值',d6.items(),type(d6.items()))
# for循环的遍历来进行获取
# # 定义一个新的字典d1,内容与d6一致
d1 = d6
print(d1)
d2 = d6.copy()
print(d2)
#
# # 获取值class的值,如果没有class,则给定默认值vip_211
print(d6.get('vip111','Not Found'))
if d6.get('vip111','Not Found') == 'Not Found':
print('这个字典中没有这个Key存在')
else:
print('这个字典有这个Key存在')
7. 转换函数
数字--字典 字符串--字典 元组--字典(key:value) ([a,b],[1,2],[4,5]) --可以转 ((a,b),(1,2)) --可以转 (a,b,1,2) --不能转 列表--字典 [[a,b],[1,2],[4,5]] --可以转 [(a,b),(1,2)] --可以转 [a,b,1,2] --不能转
dict(其他类型数据),将其他类型数据转为字典 元组tpl = (('name','muzi'),('age',18))转换为字典 列表lst = [('name','Lisa'),('age',18)]转换为字典 tpl = ('a','b',1,2) print(dict(tpl)) tpl = (('name','muzi'),('age',18)) print(dict(tpl))