1、关于字典
(1)字典(二人世界):冒号之前的叫键,冒号之后的叫值
(2)列表是有序序列,第一个放进列表的就在第一个位置,第二个放进列表的就在第二个位置;而字典是无序序列,第一个放进列表的不一定在第一个位置…因为在往字典内存储时,要经过一个hash()的工序
(3)可变序列:可以进行增删改操作的,如列表、字典
不可变序列,如字符串、元组
2、字典的创建方式
2.1 使用{}创建字典
scores = {'张三':100,'李四':98,'王五':45}
print(scores)
print(type(scores))
输出结果:
{‘张三’: 100, ‘李四’: 98, ‘王五’: 45}
<class ‘dict’>
2.2 使用dict()创建字典
student = dict(name='jack',age=20)
print(student)
输出结果:
{‘name’: ‘jack’, ‘age’: 20}
3、字典元素的获取
scores = {'张三':100,'李四':98,'王五':45}
3.1 第一种方式:用[ ]
print(scores['张三'])
#print(scores['陈六']) #输入不存在的键,会报 KeyError: '陈六'
输出结果:
100
3.2 第二种方式:用get()方法
print(scores.get('张三'))
print(scores.get('陈六')) #输入不存在的键,不会报错,会输出None 注意与[]区别
print(scores.get('麻七',99)) #这个99是在用get函数查找‘麻七’所对应的value不存在时,提供的一个默认值
输出结果:
100
None
99
3.3 [ ]方法和get()方法的区别
两种方法最大的区别在于,输入不存在的键时,[ ] 会报错,而get()方法不会报错,会输出None或者输出指定的默认值
4、字典中键key的判断
scores = {'张三':100,'李四':98,'王五':45}
print('张三' in scores)
print('张三' not in scores)
输出结果:
True
False
5、字典元素的删除
5.1 删除指定的key-value对
#删除指定的key-value对
del scores['张三']
print(scores)
输出结果:
{‘李四’: 98, ‘王五’: 45}
5.2 清空字典的元素
#清空字典的元素
scores.clear()
print(scores)
输出结果:
{}
6、字典元素的新增
scores = {'张三':100,'李四':98,'王五':45}
scores['陈六'] = 98 #直接加
print(scores)
输出结果:
{‘张三’: 100, ‘李四’: 98, ‘王五’: 45, ‘陈六’: 98}
7、字典元素的修改
scores['陈六'] = 100 #直接改
print(scores)
输出结果:
{‘张三’: 100, ‘李四’: 98, ‘王五’: 45, ‘陈六’: 100}
8、获取字典视图
8.1 获取所有的键key
#获取所有的key
scores = {'张三':100,'李四':98,'王五':45}
keys = scores.keys()
print(keys)
print(type(keys))
print(list(keys)) #将所有key组成的视图转成列表
输出结果:
dict_keys([‘张三’, ‘李四’, ‘王五’])
<class ‘dict_keys’>
[‘张三’, ‘李四’, ‘王五’]
8.2 获取所有的值value
#获取所有的value
values = scores.values()
print(values)
print(type(values))
print(list(values)) #将所有value组成的视图转成列表
输出结果:
dict_values([100, 98, 45])
<class ‘dict_values’>
[100, 98, 45]
8.3 获取所有的键-值key-value对
#获取所有的key-value对
items = scores.items()
print(items)
print(type(items))
print(list(items)) #转换之后的列表元素是由元组组成
输出结果:
dict_items([(‘张三’, 100), (‘李四’, 98), (‘王五’, 45)])
<class ‘dict_items’>
[(‘张三’, 100), (‘李四’, 98), (‘王五’, 45)]
9、字典元素的遍历
for item in scores:
print(item) #只会输出键
for item in scores: #输出键-值对(两种获取值的方式)
print(item,scores[item],scores.get(item))
输出结果:
张三
李四
王五
张三 100 100
李四 98 98
王五 45 45
10、字典的特点
10.1 所有元素都是key-value对,键key不允许重复,值value允许重复
d = {'name':'张三','name':'李四'}
print(d) #键不允许重复,会出现覆盖的情况
d = {'name':'张三','nikename':'张三'}
print(d) #值允许重复
输出结果:
{‘name’: ‘李四’}
{‘name’: ‘张三’, ‘nikename’: ‘张三’}
从以上结果可以看出,当出现两个相同的键名时,出现了覆盖的情况
10.2 字典的元素是无序的
无法在字典中指定位置插入元素,因为是无序的
10.3 字典中的键key必须是不可变对象,字符串等 ,不能是列表(可变序列)
# lst = [10,20,30]
# d = {lst:100}
# print(d) #报错 TypeError: unhashable type: 'list'
10.4 字典也可以根据需要动态地伸缩
10.5 字典会浪费较大的内存,是一种空间换时间的数据结构
字典查找速度很快,不管有多少元素,只需要通过哈希函数hash()计算存储位置,即可找到元素
11、字典生成式
利用zip()函数
items = ['Fruits','Books','Other']
prices = [96,78,85,100,120]
d = {item.upper():price for item,price in zip(items,prices)} #upper()函数是转换为大写字母的函数
print(d) #若两个列表长度不同,则以长度短的那个为准
输出结果:
{‘FRUITS’: 96, ‘BOOKS’: 78, ‘OTHER’: 85}