字典与列表的区别
列表和元组的使用缺点:当存储的数据要动态添加、删除的时候,我们一般使用列表,但是列表有时会遇到一些麻烦,定位元素比较麻烦
解决方案:既能存储多个数据,还能在访问元素的很方便的定位到需要的元素,采用字典
定义字典
dic = {}#空字典
字典往往都是成对出现的,要有键值对
语法:{键1:值1, 键2:值2, 键3:值3, ..., 键n:值n}
字典也是可变的,可以重复(值(value)可以重复,键(key)不可以),值可以是任意类型,键我们通常使用字符串,当然也可以使用其他不可变的数据类型。
这是字典的几种定义方式
# 【面试题】定义字典的方式有几种,举例说明
# 1. {key1:value1,key2:value2....}
# 2. 字典[key]=value
# 3.dict(key1=value1,key2=value2....)
# 4.dict([(key1,value1),(key2,value2)....])
# 5.dict(zip([key1,key2......],[value1,value2.......]))
这里我们会提到一个小知识点zip映射
# 5.dict(zip([key1,key2......],[value1,value2.......])) *********
# zip():映射,两个容器中相同位置的元素一一对应,产生映射关系,形成键值对
# r = list(zip([45,7,8],[23,56,78]))
# print(r) # [(45, 23), (7, 56), (8, 78)]
# dict51 = dict([(45, 23), (7, 56), (8, 78)])
# print(dict51)
注意:zip中容器中元素的数量可以不一致,以少的为准。
字典的使用
# 1.{}空字典
dic1 = {}
# 2.非空字典
# a.key和value的数据类型
# 注意1:字典中的key只能是不可变的数据类型,无法使用可变数据类型【list set dict】,和集合中的元素的特征一样
# dict21 = {[6,7,8]:10} # TypeError: unhashable type: 'list'
# value可以是任意类型
dict22 = {'a':10,'b':35.7,'c':True,'d':[5,7,78],'e':{56,7,8},'f':'ghgh'}
print(dict22)
# b.key和value是否重复
# 注意2:key是唯一的,不可以重复,和集合中的元素的特征一样,如果出现了多个相同的key,后面的value会覆盖之前的value
info_dict ={'name':'张三','age':10,'height':120,'name':'李四'}
print(info_dict)
# value可以重复
score_dict = {'张三':96,'李四':96,'小明':96}
print(score_dict)
# c.字典是无序的
set1 = {345,6,7,9,90,0}
print(set1) # {0, 6, 7, 345, 9, 90}
'''
字典中的所有的key取出来,其实本质上就是一个集合
Python3.7之前,显示的就是无序
Python3.7之后,看上去显示的是'有序',但是字典是无序的
'''
dict22 = {'a':10,'b':35.7,'c':True,'d':[5,7,78],'e':{56,7,8},'f':'ghgh'}
print(dict22)
# d.字典是可变的
info_dict = {'name':'张三','age':10,'height':120}
# 1>通过键获取值,语法:dic[key]
name = info_dict['name']
print(name)
age = info_dict['age']
print(age)
# 2>通过键修改值,语法:dic[key] = 值
# 注意1:dic[key] = 值,如果key存在,则表示修改指定key对应的value
info_dict['name'] = '李四'
print(info_dict) # {'name': '李四', 'age': 10, 'height': 120}
# 注意2:dic[key] = 值,当key不存在时, 则表示向字典中添加键值对
info_dict['score'] = 99
print(info_dict) # {'name': '李四', 'age': 10, 'height': 120, 'score': 99}
'''
列表:有序的,可变的,可以存储重复元素,可以存储不同类型的元素 []
元组:有序的,不可变的,可以存储重复元素,可以存储不同类型的元素 ()
集合:无序的,可变的,不允许存储重复元素,只能存储不可变的数据类型 {34},{}表示字典
字典:无序的,可变的,(key唯一,value可以重复),(key只能是不可变的数据类型,value任意类型) {}
'''
字典的遍历
字典遍历要注意,由于字典分为键值对,可以遍历出来两个元素,这个就要具体情况具体分析了
当然我都给你们列出来了
info_dict = {'name': '李四', 'age': 10, 'height': 120, 'score': 99}
# 注意:在字典的使用中,只要拿到key,则通过dic[key]就可以获取到value
'''
注意:
已知key----->获取到的value是唯一的,dic[key]
已知value---->获取到的key可能有多个,没有专门的语法,需要通过遍历字典进行比对
'''
# 方式一 ******
for key in info_dict:
print(key,info_dict[key])
# 方式二
# print(info_dict.keys()) # 获取所有的key
for key in info_dict.keys():
print(key,info_dict[key])
# 方式三:遍历value
print(info_dict.values()) # 获取所有的value
for value in info_dict.values():
print(value)
# 方式四:遍历key和value *********
# print(info_dict.items())
for key,value in info_dict.items():
print(key,value)
字典的系统功能
# 1.增加
info_dict = {'name':'张三','age':10,'height':120}
# a.key不存在,dic[key] = value ******
info_dict['score'] = 99
print(info_dict)
# b.update():更新/合并 *******
# d1.update(d2):将d2中键值对更新/合并到d1中
subdict = {'a':10,'b':20}
info_dict.update(subdict)
print(info_dict)
# 2.删除
# a.pop():弹出 *********
# dic.pop(key):将指定key对应的键值对从字典中弹出
info_dict.pop('a')
print(info_dict)
# 注意:如果key不存在,执行pop操作则报错KeyError,和在集合中删除一个不存在的元素报的错相同
# info_dict.pop('gender') # KeyError: 'gender'
# 优化
key = 'gender'
if key in info_dict:
info_dict.pop('gender')
# b.del dic[key]
del info_dict['b']
print(info_dict)
# c.clear():清空
# info_dict.clear()
# print(info_dict) # {}
# 3.查
print(len(info_dict)) # 获取键值对的对数
print(info_dict.keys())
print(info_dict.values())
print(info_dict.items())
# get() ***********
# dic.get(key):通过key获取对应的value,如果key不存在,不会报错
# dic[key]:如果key不存在,则会报错
info_dict = {'name':'张三','age':10,'height':120}
# print(info_dict['gender']) # KeyError: 'gender'
r = info_dict.get('gender') # None
print(r)
# 应用
key = 'gender'
if info_dict.get(key):
info_dict.pop('gender')