本节概要
- 字典概念
- 字典的使用方法
- 遍历字典
程序实例9
在第6节中,我们通过两个列表分别保存学生的姓名和成绩。然而这种方式存在的一个问题就是无法保证学生姓名和成绩能够对齐。在本节中,我们通过字典来把学生姓名和成绩相关联。
字典使用键-值(key-value)存储,我们通过键能够迅速找到其对应的值。以学生姓名和成绩为例,不同学生有不同的姓名(先不考虑重名的情况),因此每个姓名对应一个成绩,此时姓名就相当于键(key),成绩就是值(value)。当我们想查张三成绩的时候,只需要去字典中查key=张三对应的value即可。下面给出python中使用字典的几个示例:
>>> students_info = {"张三":97, "呼延灼":75, "李四":68} # 把学生姓名和成绩保存为字典
>>> students_info["张三"] # 获取张三的成绩
>>> 97
>>> students_info["李四"] # 获取李四的成绩
>>> 68
在定义字典的时候,我们也可以先定义一个空字典,然后再往字典中添加键-值对。定义空字典有两种形式:
students_info = dict() # 第一种定义空字典的方式
students_info = {} # 第二种定义空字典的方式
向字典中添加元素很简单,如下所示即可。需要注意的是字典中不允许一个键对应多个值,如果添加的键在字典中原来就存在,那么这个键对应的值会被替换为新的值。
# 如果students_info中原来没有"王五",则会添加键-值对("王五", 59)
# 如果students_info中原来存在"王五",则王五的成绩会被覆盖为59
students_info["王五"] = 59
根据键获取值的时候需要注意键存在于字典中,否则程序会报错,就像下面所示的情况:
>>> students_info = {"张三":97, "呼延灼":75, "李四":68}
>>> students_info["王五"]
Traceback (most recent call last):
File "<stdin>", line 1 , in <module>
KeyError: '王五'
有三种方式可以安全地使用字典:
# 方法1
if "王五" in students_info: # 通过in判断key是否在字典中
print(students_info["王五"])
# 方法2
if students_info.has_key("王五"): # 通过has_key()判断key是否在字典中
print(students_info["王五"])
# 方法3
score = students_info.get("王五") # 当key存在时get()返回value,否则返回None。None代表空值
if score is not None: # 也可以写作 if score != None:
print(score)
接下来我们介绍字典的两个非常有用的方法:keys()和items()。keys()方法能够获取字典所有key组成的列表;items(方法能够)获取字典所有的key-value对组成的列表。
>>> students_info = {"张三":97, "呼延灼":75, "李四":68}
>>> students_info.keys()
>>> dict_keys(["张三", "呼延灼", "李四"])
>>> students_info.items()
>>> dict_items([("张三", 97), ("呼延灼", 75), ("李四", 68)])
# ("张三", 97) 圆括号的叫做元组,["张三", 97]方括号的叫数组,元组可以理解为不能更改的列表
通过循环遍历字典中所有key-value也是经常用到的操作,接下来我们介绍如何便利字典。遍历字典有两种方法,一个是遍历key,然后通过key获取对应的value。另一个种方法是直接遍历key-value对。基于keys()和items()我们有两种遍历字典的方法:
# 方法1
for name in students_info.keys():
print("姓名:{0},分数:{1}".format(name, students_info[name]))
# 方法2
for name, score in students_info.items():
print("姓名:{0},分数:{1}".format(name, score))
现在我们使用字典完成学生成绩录入程序,完整代码如下所示:
students_info = {"张三":97, "呼延灼":70, "李四":68}
for name, score in students_info.items():
print("{0}同学你的分数为{1}分".format(names, score))
本节总结
本节主要介绍的内容包括:
- 字典是一种通过key-value存储的数据结构,我们可以通过key迅速索引到value。
- 字典中一个key无法对应多个value,如果向字典中重复添加具有相同key的key-value数据,那么value会被覆盖。
- 在通过key获取value的时候需要先判断字典中是否存在key。或者通过get()来获取value,当key不存在的时候会返回None。
- 通过keys()可以获取字典的所有key,通过items可以获取字典的所有key-value对。
- 使用for循环+keys()/items()可以实现字典的遍历。
在本节中我们学习了字典的使用,将学生姓名和成绩关联,但是这个程序仍然不完善。当前学生信息都是写在代码中的,每次我们修改学生信息的时候都要修改代码,这样是不易于维护的。最好的方法是我们把所有学生信息写在一个单独的文件中,每次程序读取文件来获取学生信息,这样我们每次修改学生信息只需要在那个文件中修改即可。所以下一节我们会介绍如何读写文件。我们下一节再见吧。