课程名称:Python3 入门教程(新版)
课程章节: Python的Dict容器
主讲老师:咚咚呛
课程内容
- 什么是 dict
- dict容器的读增删
- dict容器的其他方法
课程收获
Dict 的定义
我们使用花括号
{}
表示这是一个dict
,然后key和value之间使用冒号:
分割,并且每一组key:value
的最后,以逗号,
表示这一组的结束。
d = {
'Alice': 45,
'Bob': 60,
'Candy': 75,
'David': 86,
'Ellena': 49
}
print(d)
Dict的读取
直接使用 key
,访问对应的 value
的时候,当 key
不存在的时候,就会报错。因此,推荐使用 get()
方法进行访问。当访问的 key
不存在的时候,返回 None
d = {
'Alice':86,
'Tom':99,
'David':80
}
print(d['Tom'])
print(d.get('Sean'))
添加 Dict 元素
d = {
'Alice':86,
'Tom':99,
'David':80
}
d['Alin'] = 96
print(d)
更新 dict 元素
赋值语句其实有两个功能:
- 当key不存在时,往dict中添加对应的key: value元素。
- 当key存在时,会更新dict,用新的value替换原来的value。
因此,在使用赋值语句往dict中添加元素时,为了避免不必要的覆盖问题,我们需要先判断key是否存在,然后再做更新。
d = {
'Alice': 45,
'Bob': 60,
'Candy': 75,
'David': 86,
'Ellena': 49
}
score = d.get('Alice')
d['Alice'] = 60
print(d)
删除 dict 元素
dict提供便捷的
pop()
方法,允许我们快速删除元素,pop()
方法需要指定需要删除的元素的key
,并返回对应的value
。
d = {
'Alice': 45,
'Bob': 60,
'Candy': 75,
'David': 86,
'Ellena': 49
}
name = 'Alice'
if name in d.keys():
d.pop(name)
else:
print('{} not in d'.format(name))
print(d)
dict 的特点
- 查找速度块
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
- 有序与无序
在Python3.5之前,dict中的元素是无序的,也就是dict中元素的插入顺序和打印顺序未必一致。我们可以认为在Python3.6的版本以后,dict是有序的,但是一般而言,为了避免不必要的误解,一般在需要有序的dict时,我们会使用一种叫做Ordereddict的字典,来确保有序。
- key 不可变
对于基础数据类型,字符串、数字等,这些都是不可变的,可以作为dict的key,而对于复杂数据类型,经过前面的学习,我们知道tuple是不可变的,list是可变的,因此tuple可以作为dict的key,但是list不可以作为dict的key,否则将会报错。
-
遍历dict
遍历dict有两种方法, 第一种是遍历dict的所有key,并通过key获得对应的value。第二种方法是通过dict提供的items()方法,items()方法会返回dict中所有的元素,每个元素包含key和value。
d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } for key, value in d.items(): if value > 60: print(key, value)
dict 的其他操作方法
-
获取dict的所有key
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} for key in d.keys(): print(key)
-
获取dict的所有value
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} for key in d.values(): print(key)
-
清除所有元素
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} d.clear()