一、何为字典
在学习字典之前我们先来认识一下键值对。键值对 可以将键(key)和值(value)进行一对一映射,进而可以根据键,快速寻找到值。 打个比方:可以将键理解为学生的学号,值理解为学生本人。在大学中,辅导员可以通过学号快速寻找到对应的学生是谁。
而字典是一种用来存储键值对的结构。
二、创建字典
创建字典(dict)有两种方式:
a = {} #方式一
b = dict() #方式二
print(type(a)) #<class 'dict'>
print(type(b)) #<class 'dict'>
可以在创建字典的同时指定初始值:
student = {
'id' : 12138 ,
'name' : '张三'
}
print(student)
运行结果为:
注意:
1.键值对之间使用逗号进行分割;键和值之间使用冒号进行分割。
2.使用print直接打印键值对内容。
3.为了代码美观,在创建字典时可以将多个键值对分成多行书写。
三、查找键(key)
- 使用 in 或者是 not in 可以判断 key 是否在字典中,返回值的类型为布尔类型:
student = {
'id' : 12138 ,
'name' : '张三'
}
print('id' in student) #True
print('age' in student) #False
print('id' not in student) #False
print('age' not in student) #True
- 使用 “[ ]” 通过类似取下标的方式,获取到元素的值,在这里所说的 “下标” 是键(key):
student = {
'id' : 12138 ,
'name' : '张三'
}
print(student['id']) #12138
print(student['name']) #张三
如果键(key)在字典中不存在,那么程序就会抛出异常:
student = {
'id' : 12138 ,
'name' : '张三'
}
print(student['age'])
运行结果为:
四、新增/修改元素
使用 “[ ]” 可以根据 key 新增/修改元素:
如果 key 不存在,则执行的为新增键值对操作:
student = {
'id' : 12138 ,
'name' : '张三'
}
student['age'] = 16
print(student) #{'id': 12138, 'name': '张三', 'age': 16}
如果 key 存在,则执行的为修改键值对操作:
student = {
'id' : 12138 ,
'name' : '张三'
}
student['id'] = 12345
print(student) #{'id': 12345, 'name': '张三'}
五、删除元素
可以使用 pop 方法根据 key 删除对应的键值对:
student = {
'id' : 12138 ,
'name' : '张三'
}
student.pop('id')
print(student) #{'name': '张三'}
注意:pop 是方法,要记得通过 “.” 调用!
六、遍历字典元素
可以直接使用 for 循环获取到字典中的所有 key,通过 key 进而获取到每一个value:
student = {
'id' : 12138 ,
'name' : '张三'
}
for i in student:
print(i, student[i])
运行结果为:
七、取出所有key和value
- 使用 keys 方法可以获取到字典中的所有 key:
student = {
'id' : 12138 ,
'name' : '张三'
}
print(student.keys()) #dict_keys(['id', 'name'])
在这里的 dict_keys 是一种特殊的类型,专门用来表示字典中的所有 key。大部分元组支持的操作 dict_keys 也同样适用。
- 使用 values 方法可以获取到字典中的所有 value:
student = {
'id' : 12138 ,
'name' : '张三'
}
print(student.values()) #dict_values([12138, '张三'])
此处的 dict_values 也是一种特殊的类型,和 dict_keys 类似。
- 使用 items 方法可以获取到字典中的所有 item:
student = {
'id' : 12138 ,
'name' : '张三'
}
print(student.items()) #dict_items([('id', 12138), ('name', '张三')])
此处的 dict_items 也是一种特殊的类型,和 dict_keys 类似。
八、合法的key类型
并非所有的类型都可以作为字典的key。
字典本质上是一个哈希表,哈希表的 key 要求是可哈希的,即可以计算出一个哈希值。
我们可以使用 hash 函数计算某个对象的哈希值,只要是能计算出哈希值的类型,都可以作为字典的key:
print(hash(1))
print(hash(3.14))
print(hash('hello'))
print(hash(True))
print(hash(())) #()是一个空的元组
运行结果为:
- 列表无法计算哈希值:
print(hash([]))
运行结果为:
- 字典无法计算哈希值:
print(hash({}))
运行结果为:
Ending。