2.3 字典
1. 基本概念
字典:
- 字典是由一系列键值对组成,可以是数字、字符串、列表等任何类型。
- 字典中的键值对是无序的,都是随机排列。
- 字典中的键(key)必须保证唯一,但是值(value)可以重复。
- 键和值之间用逗号 ‘:’ 分隔开,而键值对之间用冒号 ‘,’ 分隔,整个字典被一对 ‘{}’ 包括起来。
2. 字典的创建、添加、删除、修改、查询
2.1 创建字典
创建字典时我们可以先创建一个空字典,即使用一对空的花括号定义一个字典,然后再分行添加各个键值对。
例:
scores = {} # 创建空字典
# scores = dict() # 创建空字典
scores['语文'] = 89 # 向字典中添加键值对
scores['数学'] = 92
scores['英语'] = 96
print(scores)
输出:
{'语文': 89, '数学': 92, '英语': 96}
进程已结束,退出代码 0
2.2 添加键值对
例1:添加单个键值对
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
}
scores['政治'] = 92
print(scores)
输出:
{'语文': 89, '数学': 92, '英语': 96, '政治': 92}
进程已结束,退出代码 0
例2:添加多个,使用 a.update(b) 方法将另一个字典 b 中的内容添加到原字典 a 中,相同 key 值的内容 value 值被替换,其余内容添加。
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
}
score2 = {
'政治': 95,
'历史': 88,
'英语': 92,
}
scores.update(score2)
print(scores)
输出:
{'语文': 89, '数学': 92, '英语': 92, '政治': 95, '历史': 88}
进程已结束,退出代码 0
例3:使用 a.setdefault() 函数向字典 a 中添加 key 值,如果 key 存在,不做修改;如果 key 不存在,该方法会先为这个不存在的 key 设置一个默认的 value,然后再返回该 key 对应的 value。
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
}
print(scores.setdefault('政治', 91))
print(scores)
输出:
91
{'语文': 89, '数学': 92, '英语': 96, '政治': 91}
进程已结束,退出代码 0
2.3 删除字典
创建字典时我们可以先创建一个空字典,即使用一对空的花括号定义一个字典,然后再分行添加各个键值对。
- del a[ ] (使用 del 方法删除字典 a 中指定 key-value 对 )
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
del scores['语文']
print(scores)
输出:
{'数学': 92, '英语': 96, '政治': 95}
进程已结束,退出代码 0
- a.pop( )
使用 pop( ) 方法删除字典 a 中指定 key 的 key-value 对;key 存在,则删除,并返回对应的 value;key 不存在,报错。
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
print(scores)
scores.pop('语文')
print(scores)
print(scores.pop('物理')) # 原列表 key 值中没有物理,报错 KeyError
输出:
Traceback (most recent call last):
{'语文': 89, '数学': 92, '英语': 96, '政治': 95}
File "D:/PythonWorkSpace/Lianxi.py", line 195, in <module>
{'数学': 92, '英语': 96, '政治': 95}
print(scores.pop('物理'))
KeyError: '物理'
进程已结束,退出代码 1
- a.clear( )
用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典。
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
scores.clear()
print(scores)
输出:
{}
进程已结束,退出代码 0
- a.popitem()
删除字典 a 中最后一个 key-value。
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
print(scores.popitem())
print(scores)
输出:
('政治', 95)
{'语文': 89, '数学': 92, '英语': 96}
进程已结束,退出代码 0
由于实际上 popitem 弹出的就是一个元组,因此程序完全可以通过序列解包的方式用两个变量分别接收 key 和 value。
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
key, value = scores.popitem()
print(scores)
print(key, value)
输出:
{'语文': 89, '数学': 92, '英语': 96}
政治 95
进程已结束,退出代码 0
2.4 修改字典
要修改字典中的值,可依次指明自点名、用方括号括起来的键以及与该键相关联的新值。
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
scores['语文'] = 90
print(scores)
输出:
{'语文': 90, '数学': 92, '英语': 96, '政治': 95}
进程已结束,退出代码 0
2.5 查询字典
例1:a.keys( ) 返回字典 a 中的所有 key 值。
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
print(scores.keys())
输出:
dict_keys(['语文', '数学', '英语', '政治'])
进程已结束,退出代码 0
例2:a.values( ) 返回字典 a 中的所有 values 值。
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
print(scores.values())
输出:
dict_values([89, 92, 96, 95])
进程已结束,退出代码 0
例3:a.items( ) 返回字典 a 中的所有 key-value。
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
print(scores.items())
输出:
dict_items([('语文', 89), ('数学', 92), ('英语', 96), ('政治', 95)])
进程已结束,退出代码 0
2.6 排序字典
可以通过对字典的键或值进行排序来实现对整个字典的排序。
例:
scores = {
'yuwen': 89,
'shuxue': 92,
'yingyu': 96,
'zhengzhi': 95,
}
print('未排序:', scores)
print('已排序:', sorted(scores.keys()), [scores[i] for i in sorted(scores.keys())]) # 使用sorted()函数后为列表
输出:
未排序: {'yuwen': 89, 'shuxue': 92, 'yingyu': 96, 'zhengzhi': 95}
已排序: ['shuxue', 'yingyu', 'yuwen', 'zhengzhi'] [92, 96, 89, 95]
进程已结束,退出代码 0
3. 字典的特性
- 索引
通过键 key 来索引出值 value。
例:
scores = {
'语文': 89,
'数学': 92,
'英语': 96,
'政治': 95,
}
print(scores['语文'])
输出:
89
进程已结束,退出代码 0
- 嵌套
有时候需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这成为嵌套。
例1:列表中嵌套字典
stu1 = {'name': 'xiaoming', 'sex': 'male', 'number': '01'}
stu2 = {'name': 'xiaogang', 'sex': 'male', 'number': '02'}
stu3 = {'name': 'xiaohong', 'sex': 'female', 'number': '03'}
students = [stu1, stu2, stu3]
for student in students:
print(student)
输出:
{'name': 'xiaoming', 'sex': 'male', 'number': '01'}
{'name': 'xiaogang', 'sex': 'male', 'number': '02'}
{'name': 'xiaohong', 'sex': 'female', 'number': '03'}
进程已结束,退出代码 0
例2:字典中嵌套列表
student = {'name': 'xiaoming', 'sex': 'male', 'number': '01', 'choose_class': ['高数', '英语', '大物']}
print(student['name'].title() + '的选课有:')
for stu in student['choose_class']:
print(stu)
输出:
Xiaoming的选课有:
高数
英语
大物
进程已结束,退出代码 0
例3:字典中嵌套字典
students = {
'stu1': {'name': 'xiaoming', 'sex': 'male', 'number': '01', 'choose_class': '高数'},
'stu2': {'name': 'xiaogang', 'sex': 'male', 'number': '02', 'choose_class': '英语'},
'stu3': {'name': 'xiaohong', 'sex': 'female', 'number': '03', 'choose_class': '电路'},
}
for stu_name, stu_info in students.items():
print(stu_name, stu_info)
输出:
stu1 {'name': 'xiaoming', 'sex': 'male', 'number': '01', 'choose_class': '高数'}
stu2 {'name': 'xiaogang', 'sex': 'male', 'number': '02', 'choose_class': '英语'}
stu3 {'name': 'xiaohong', 'sex': 'female', 'number': '03', 'choose_class': '电路'}
进程已结束,退出代码 0
- 成员赋操作
判断某个值是否在字典的键 key 中,不能判断该值是否在值 value 中。
输入:
student = {'name': 'xiaoming', 'sex': 'male', 'number': '01', 'choose_class': '高数'}
print('name' in student)
print('高数' in student)
输出:
True
False
进程已结束,退出代码 0
- 迭代:for 循环
输入:
student = {'name': 'xiaoming', 'sex': 'male', 'number': '01', 'choose_class': '高数'}
print('遍历 key :')
for key in student: # 遍历 key
print(key)
print('\n遍历 value :')
for value in student.values(): # 遍历 value
print(value)
print('\n打印字典所有内容,包括key和value :')
for key in student: # 打印字典所有内容,包括key和value
print(key, student[key])
print('\n打印字典所有内容 :')
for key, value in student.items(): # 打印字典所有内容
print(key, value)
输出:
遍历 key :
name
sex
number
choose_class
遍历 value :
xiaoming
male
01
高数
打印字典所有内容,包括key和value :
name xiaoming
sex male
number 01
choose_class 高数
打印字典所有内容 :
name xiaoming
sex male
number 01
choose_class 高数
进程已结束,退出代码 0