字典的使用
创建字典的方式
- 使用{}创建字典
- 语法:{k1:v1,k2:v2,k3:v3,k4:v4,k5:v5}
# 创建字典
dic = {'name':'贾宏声',age:28,'gender':'男'}
print(dic,type(dic))
# 输出结果
# {'name': '贾宏声', 'age': 28, 'gender': '男'} <class 'dict'>
- 使用dict()函数来创建字典
- 每一个参数都是一个键值对,参数名就是键,参数名就是值(这种方式创建的字典,key都是字符串)
dic = dict(name='贾宏声',age=28,gender='男')
print(dic,type(dic))
# 输出结果
# {'name': '贾宏声', 'age': 28, 'gender': '男'} <class 'dict'>
- 也可以将一个包含有双值子序列的序列转换为字典
- 双值是指,序列中的元素只有两个值,[1,2] (1,2) 'ab'
- 子序列是指,如果序列中的元素也是序列,那么就称这个元素为子序列,如:[(1,2),(3,5)]就是双值的子序列
dic = dict(name='贾宏声',age=28,gender='男')
dic = dict([('name','JiaHongSheng'),('age',18)])
print(dic,type(dic))
# 输出结果
# {'name': 'JiaHongSheng', 'age': 18} <class 'dict'>
字典的相关函数
- len() 获取字典中键值对的个数
dic = dict(name='贾宏声',age=28,gender='男')
print(len(dic))
# 输出结果
# 3
- in 、ont in
- in 检查字典中是否包含指定的键
- not in 检查字典中是否不包含指定的键
dic = dict(name='贾宏声',age=28,gender='男')
print('hello' in dic)
print('hello' not in dic)
print('name' in dic)
print('age' not in dic)
# 输出结果
# False
# True
# True
# False
- 获取字典中的值,根据键来获取值.通过[]来获取值时,如果键不存在,会抛出异常keyError
- 语法:d[key]
dic = dict(name='贾宏声',age=28,gender='男')
print(dic['name'])
print(dic['age'])
print(dic['gender'])
# 另一种形式
n = 'name'
print(dic[n])
# 输出结果
# 贾宏声
# 28
# 男
# 贾宏声
- 获取字典中的值的另一种方法:get(key[,default]),该方法会根据键来获取字典中的值.如果获取的键在字典中不存在,会返回None。也可以指定一个默认值,来作为第二个参数,这样在获取不到值的时候,将会返回默认值。
dic = dict(name='贾宏声',age=28,gender='男')
print(dic.get('name'))
# 输出结果:贾宏声
print(dic.get('hello')) # 一个字典中没有的元素
# 输出结果:None
print(dic.get('hello','默认值')) # 可自定义在要查询元素没有的时候返回默认值
# 输出结果:默认值
print(dic.get('age','默认值')) # 可自定义在要查询元素没有的时候返回默认值,如果有则返回查询key的值
# 输出结果:28
- 修改字典
- 语法:dic[key] = value 如果key存在则覆盖,不存在则添加
dic = dict(name='贾宏声',age=28,gender='男')
dic['name'] = 'JiaHongSheng' # 修改字典中的key-value
print(dic)
# 输出结果,此时的name的value已经被修改为‘JiaHongSheng’
# {'name': 'JiaHongSheng', 'age': 28, 'gender': '男'}
dic['address'] = '中央戏剧学院' # 向字典中添加key-value
print(dic)
# 输出结果
# {'name': 'JiaHongSheng', 'age': 28, 'gender': '男', 'address': '中央戏剧学院'}
- setdefault(key[,default])可以用来向字典中添加key-value
- 如果key已经存在于字典中,则返回key的值,不会对字典做任何操作
- 如果key不存在,则向字典中添加这个key,并设置value
dic = dict(name='贾宏声',age=28,gender='男')
dic.setdefault('name','JiaHongSheng') # 该key已经存在于字典中,字典不会有变化
dic.setdefault('school','中央戏剧学院') # 该key在字典中不存在,会向字典中添加这个key-value
# 返回对应key的值
print('result1 = ',result1)
print('result2 = ',result2)
# 输出结果
# result1 = 贾宏声
# result2 = 中央戏剧学院
print(dic)
# 输出结果
# {'name': '贾宏声', 'age': 28, 'gender': '男', 'school': '中央戏剧学院'}
- update([other])
- 将其他的字典中的key-value添加到当前字典中
- 如果有重复的key,则后边的会替换当前的
# update([other])
dic1 = {'a':1,'b':2,'c':3,'d':4}
dic2 = {'e':5,'f':6,'g':7,'h':8}
dic1.update(dic2)
print(dic1)
# 输出结果
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8}
# 此时的两个字典中有两key名为a,则key-->a 的value会由原先的1,变成后来的8
dic1 = {'a':1,'b':2,'c':3,'d':4}
dic2 = {'e':5,'f':6,'g':7,'a':8}
dic1.update(dic2)
print(dic1)
# 输出结果
# {'a': 8, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7}
- 字典的删除操作
- 使用del来删除字典中的key-value。
- 该种方式在删除不存在的key-value时会报错
dic = {'name':'贾宏声','age':27,'gender':'男'}
# 使用 del 删除age
del dic['age']
print(dic)
# 输出结果:此时dic中的age元素就被删除了
# {'name': '贾宏声', 'gender': '男'}
- 使用popitem()方法
- 该方法会随即删除字典中的一个键值对,一般都会删除最后一个键值对
- 删除之后,它会将删除的key-value作为返回值返回,返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个元素是删除的value
- 当使用popitem()删除一个空字典时,会抛出异常keyError:'popitem():dictionary is empty'
dic = dict(name='贾宏声',age='18',gender='男',address='中央戏剧学院')
# 对dic使用popitem()方法
dic.popitem()
print(dic)
# 输出结果:此时对比原字典可知字典中的最后一个address元素被删除
# {'name': '贾宏声', 'age': '18', 'gender': '男'}
-
返回值验证
dic = dict(name='贾宏声',age='18',gender='男',address='中央戏剧学院')
# 定义变量接收popitem()方法的返回值
result = dic.popitem()
print('popitem()删除的元素是:',result)
# 输出结果:返回一个元组
# popitem()删除的元素是: ('address', '中央戏剧学院')
-
删除空字典结果验证
# 使用popitem()删除一个空字典
dic = dict(name='贾宏声')
dic.popitem() # 第一次删除
print('第一次删除后:',dic)
dict.popitem() # 第二次删除,此时已为空字典,会有异常抛出
# 输出结果:
# TypeError: descriptor 'popitem' of 'dict' object needs an argument
- pop(key[,default])
- 根据key删除字典的key-value,会将被删除的value返回
- 如果删除不存在的key,会抛出异常。如果制定了默认值,在删除不存在的key时,不会报错,而是直接返回默认值
dic = dict(name='贾宏声',age=27,gender='男',address='中央戏剧学院')
# 删除字典中的name元素,并用result变量接收其返回的值
result = dic.pop('name')
print('删除name后的字典:',dic)
print('删除的元素的value是:',result)
# 输出结果
# 删除name后的字典: {'age': 27, 'gender': '男', 'address': '中央戏剧学院'}
# 删除的元素的value是: 贾宏声
-
删除不存在的key
# pop()方法删除不存在的key
dic = dict(name='贾宏声',age=27,gender='男',address='中央戏剧学院')
dic.pop('hello')
# 输出结果:保存回显keyError
# KeyError: 'hello'
# 新增第二个参数(默认值)
dic = dict(name='贾宏声',age=27,gender='男',address='中央戏剧学院')
# 给pop()方法传递第二个参数(默认值)
result = dic.pop('hello','这是默认值,在删除的key不存的时候返回该默认值')
print('返回信息:',result)
# 输出结果
# 返回信息: 这是默认值,在删除的key不存的时候返回该默认值
- clear()用来清空字典
dic = dict(name='贾宏声',age=27,gender='男',address='中央戏剧学院')
dic.clear()
print(dic)
# 输出结果
# {}
- 字典的复制
- copy()
- 该方法用于对字典的浅复制
- 复制以后的对象和原对象是相互独立的,修改其中任何一个对象都不会影响另一个对象
- 注意:浅复制会简单赋值对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制
dic = {'name':'贾宏声','age':27,'address':'中央戏剧学院'}
dic2 = dic.copy()
print(dic,id(dic))
print(dic2,id(dic2))
# 输出结果:由其二者id不同可知他们是连个完全独立的对象
# {'name': '贾宏声', 'age': 27, 'address': '中央戏剧学院'} 2774187005952
# {'name': '贾宏声', 'age': 27, 'address': '中央戏剧学院'} 2774187006016
dic2['age'] = 21
print(dic,id(dic))
print(dic2,id(dic2))
# 输出结果:由此可见二者的修改不会相互影响,相互独立
# {'name': '贾宏声', 'age': 27, 'address': '中央戏剧学院'} 1740147677184
# {'name': '贾宏声', 'age': 21, 'address': '中央戏剧学院'} 1740147677248
- 当遇到这种key的value也是一个字典(可变对象)的时候,copy()不会对可变对象进行复制
# 当遇到这种key的value也是一个字典(可变对象)的时候,copy()不会对可变对象进行复制
dic = {'name':'贾宏声','other':{'occupation':'演员','gender':'男'},'age':27,'address':'中央戏剧学院'}
dic2 = dic.copy()
print(dic,id(dic))
print(dic2,id(dic2))
# 输出结果
# {'name': '贾宏声', 'other': {'occupation': '演员', 'gender': '男'}, 'age': 27, 'address': '中央戏剧学院'} 2088578930752
# {'name': '贾宏声', 'other': {'occupation': '演员', 'gender': '男'}, 'age': 27, 'address': '中央戏剧学院'} 2088578931072
dic2['other']['occupation'] = '贝斯手'
print(dic,id(dic))
print(dic2,id(dic2))
# 输出结果:此时的other的值是一个可变对象,在复制之后,对可变对象中的元素进行修改该后,二者同步发生变化,由此可见该可变对象并没有被复制,而是二者指向了同一个id的对象
# {'name': '贾宏声', 'other': {'occupation': '贝斯手', 'gender': '男'}, 'age': 27, 'address': '中央戏剧学院'} 2770313762816
# {'name': '贾宏声', 'other': {'occupation': '贝斯手', 'gender': '男'}, 'age': 27, 'address': '中央戏剧学院'} 2770313763136
- 字典的遍历
- keys()方法
- 该方法会返回字典中所有的key
- 该方法会返回一个序列,序列中保存有字典的所有的键
# 通过遍历keys()来获取所有的键
dic = {'name':'贾宏声','other':{'occupation':'演员','gender':'男'},'age':27,'address':'中央戏剧学院'}
for k in dic.keys() :
print(k,dic[k]) # k 获取到字典中的key
# 输出结果
# name 贾宏声
# other {'occupation': '演员', 'gender': '男'}
# age 27
# address 中央戏剧学院
- values()方法
- 该方法会返回一个序列,序列中保存有字典中的所有的值
dic = {'name':'贾宏声','other':{'occupation':'演员','gender':'男'},'age':27,'address':'中央戏剧学院'}
for v in dic.values() :
print(v)
# 输出结果
# 贾宏声
# {'occupation': '演员', 'gender': '男'}
# 27
# 中央戏剧学院
- items()方法
- 该方法会返回字典中所有的项
- 它会返回一个序列,序列中包含有双值子序列
- 双值分别是,字典中的key和value
dic = {'name':'贾宏声','other':{'occupation':'演员','gender':'男'},'age':27,'address':'中央戏剧学院'}
print(dic.items())
# 输出结果
# dict_items([('name', '贾宏声'), ('other', {'occupation': '演员', 'gender': '男'}), ('age', 27), ('address', '中央戏剧学院')])
# 使用for循环遍历字典
dic = {'name':'贾宏声','other':{'occupation':'演员','gender':'男'},'age':27,'address':'中央戏剧学院'}
for k,v in dic.items() :
print(k,'=',v)
# 输出结果
# name = 贾宏声
# other = {'occupation': '演员', 'gender': '男'}
# age = 27
# address = 中央戏剧学院