正文 【Python基础】4. 数据类型之字典及其操作 拾年之璐 V管理员 /2020年 /421 阅读 0804 ## 数据类型之字典及其操作 [TOC] ### 1. 什么是字典 在Python中, `字典` 是一系列 `键—值` 对 。每个 `键` 都与一个 `值` 相关联,你可以使用 `键` 来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。 在Python中,字典用放在 `花括号{}` 中的一系列 `键—值` 对表示, 示例: ```python student = { 'name': '张三', 'college': '计算机学院', 'class': '计算机1601' } print(student) ``` `键—值` 对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用 冒号 分隔,而 `键—值` 对之间用逗号分隔。在字典中,你想存储多少个键—值对都可以。 ### 2. 字典的增删改查 #### 2.1 查:字典访问 要获取与键相关联的值,可依次指定字典名和放在方括号内的键。 示例: ```python student = { 'name': '张三', 'college': '计算机学院', 'class': '计算机1601' } print(student['name']) ``` 示例输出: ``` 张三 ``` #### 2.2 增:添加键—值对 字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。 可以在已有数据的字典中添加新的键—值对。 示例: ```python student = { 'name': '张三', 'college': '计算机学院', 'class': '计算机1601' } print(student) student['no'] = '202010870101' print(student) ``` 示例输出: ``` {'name': '张三', 'college': '计算机学院', 'class': '计算机1601'} {'name': '张三', 'college': '计算机学院', 'class': '计算机1601', 'no': '202010870101'} ``` 也可以通过创建空的字典,然后再添加数据的形式增加键值对。 示例: ```python student = {} student['name'] = '张三' student['college'] = '计算机学院' student['class'] = '计算机1601' print(student) ``` 示例输出: ``` {'name': '张三', 'college': '计算机学院', 'class': '计算机1601'} ``` #### 2.3 改:修改字典中的值 要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。 示例: ```python student = { 'name': '张三', 'college': '计算机学院', 'class': '计算机1601' } print(student) student['name'] = '李四' student['class'] = '物联网1601' print(student) ``` 示例输出: ``` {'name': '张三', 'college': '计算机学院', 'class': '计算机1601'} {'name': '李四', 'college': '计算机学院', 'class': '物联网1601'} ``` #### 2.4 删:删除键—值对 对于字典中不再需要的信息,可使用del 语句将相应的键—值对彻底删除。使用del 语句时,必须指定字典名和要删除的键。 示例: ```python student = { 'name': '张三', 'college': '计算机学院', 'class': '计算机1601', 'phone': '18808089999' } print(student) del student['phone'] print(student) ``` 示例输出: ``` {'name': '张三', 'college': '计算机学院', 'class': '计算机1601', 'phone': '18808089999'} {'name': '张三', 'college': '计算机学院', 'class': '计算机1601'} ``` ### 3. 遍历字典 一个Python字典可能只包含几个键—值对,也可能包含数百万个键—值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键—值对、键或值。 #### 3.1 遍历所有的键—值对 示例:遍历所有的键—值对 ```python student = { 'name': '张三', 'college': '计算机学院', 'class': '计算机1601', 'phone': '18808089999' } print(student) for key, value in student.items(): print(key + '\t:' + value) ``` 示例输出: ``` {'name': '张三', 'college': '计算机学院', 'class': '计算机1601', 'phone': '18808089999'} name :张三 college :计算机学院 class :计算机1601 phone :18808089999 ``` #### 3.2 遍历所有的键 示例:遍历所有的键 ```python teacher_course = { '张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据库系统概论', '赵老师': '数值分析' } print(teacher_course) for teacher in teacher_course.keys(): print(teacher) ``` 示例输出: ``` {'张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据库系统概论', '赵老师': '数值分析'} 张老师 李老师 王老师 赵老师 ``` #### 3.3 遍历所有的值 示例:遍历所有的值 ```python teacher_course = { '张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据库系统概论', '赵老师': '数值分析' } print(teacher_course) for course in teacher_course.values(): print(course) ``` 示例输出: ``` {'张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据库系统概论', '赵老师': '数值分析'} 数据结构 算法设计与分析 数据库系统概论 数值分析 ``` #### 3.4 遍历时操作 在遍历字典的时候,还可以对字典进行相应操作后再进行遍历。 + 可以排序后输出。即对键或者值进行排序后输出。 ```python teacher_course = { 'zhang': '数据结构', 'li': '算法设计与分析', 'wang': '数据库系统概论', 'zhao': '数值分析' } print(teacher_course) for teacher in sorted(teacher_course.keys()): print(teacher) ``` 示例输出: ``` {'zhang': '数据结构', 'li': '算法设计与分析', 'wang': '数据库系统概论', 'zhao': '数值分析'} li wang zhang zhao ``` + 可以去重后输出。即如果涉及到的数据量较多,而且有重复的选项,可以剔除重复项。集合(set) 类似于列表,但每个元素都必须是独一无二的: 示例: ```python teacher_course = { '张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据结构', '赵老师': '数值分析' } print(teacher_course) for course in set(teacher_course.values()): print(course) ``` 示例输出: ``` {'张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据结构', '赵老师': '数值分析'} 数据结构 数值分析 算法设计与分析 ``` + 判断某个键或者值是否存在。 示例: ```python teacher_course = { '张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据结构', '赵老师': '数值分析' } print(teacher_course) if '数据库系统' not in teacher_course.keys(): print('课程中没有数据库系统') if '王老师' not in teacher_course.keys(): print('没有王老师') else: print('有王老师') ``` 示例输出: ``` {'张老师': '数据结构', '李老师': '算法设计与分析', '王老师': '数据结构', '赵老师': '数值分析'} 课程中没有数据库系统 有王老师 ``` ### 4. 嵌套 有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为**嵌套** 。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。 #### 4.1 列表中存储字典 示例: ```python student_0 = {'name': '张三', 'class': '计算机1601'} student_1 = {'name': '李四', 'class': '计算机1602'} student_2 = {'name': '王五', 'class': '计算机1603'} student_3 = {'name': '赵六', 'class': '计算机1604'} students = [student_0, student_1, student_2, student_3] print(students) print(len(students)) for student in students: print(student) ``` 示例输出: ``` [{'name': '张三', 'class': '计算机1601'}, {'name': '李四', 'class': '计算机1602'}, {'name': '王五', 'class': '计算机1603'}, {'name': '赵六', 'class': '计算机1604'}] 4 {'name': '张三', 'class': '计算机1601'} {'name': '李四', 'class': '计算机1602'} {'name': '王五', 'class': '计算机1603'} {'name': '赵六', 'class': '计算机1604'} ``` #### 4.2 字典中存储列表 示例: ```python school = { 'name': '武汉理工大学', 'college': ['材料学院', '化生学院', '计算机学院'] } print(school) print(school['college']) for college in school['college']: print(college) ``` 示例输出: ``` {'name': '武汉理工大学', 'college': ['材料学院', '化生学院', '计算机学院']} ['材料学院', '化生学院', '计算机学院'] 材料学院 化生学院 计算机学院 ``` 示例: ```python classes = { '计算机1601': ['张三', '李四', '王五'], '计算机1602': ['赵六', '田七'], '计算机1603': ['孙八', '周十一'], '计算机1604': ['吴十二', '郑十三', '冯宝宝'] } for the_class, student_names in classes.items(): print(the_class + '的学生有:') for student_name in student_names: print('\t' + student_name) ``` 示例输出: ``` 计算机1601的学生有: 张三 李四 王五 计算机1602的学生有: 赵六 田七 计算机1603的学生有: 孙八 周十一 计算机1604的学生有: 吴十二 郑十三 冯宝宝 ``` #### 4.3 字典中存储字典 示例: ```python students = { '张三': { 'no': '1001', 'phone': '18763336333', 'city': '武汉市' }, '李四': { 'no': '1002', 'phone': '18812345678', 'city': '北京市' }, '王五': { 'no': '1003', 'phone': '18998765432', 'city': '南京市' } } print(students) for name, info in students.items(): print(name + '的信息如下:') print('\t学号为:' + info['no'] + ',手机号是:' + info['phone'] + ',居住在' + info['city']) ``` 示例输出: ``` {'张三': {'no': '1001', 'phone': '18763336333', 'city': '武汉市'}, '李四': {'no': '1002', 'phone': '18812345678', 'city': '北京市'}, '王五': {'no': '1003', 'phone': '18998765432', 'city': '南京市'}} 张三的信息如下: 学号为:1001,手机号是:18763336333,居住在武汉市 李四的信息如下: 学号为:1002,手机号是:18812345678,居住在北京市 王五的信息如下: 学号为:1003,手机号是:18998765432,居住在南京市 ``` > 参考文献: > > [1] Python编程:从入门到实践 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --