面向小白的Python教程:入门篇(七)

本节概要

  • 字典概念
  • 字典的使用方法
  • 遍历字典

程序实例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()可以实现字典的遍历。

在本节中我们学习了字典的使用,将学生姓名和成绩关联,但是这个程序仍然不完善。当前学生信息都是写在代码中的,每次我们修改学生信息的时候都要修改代码,这样是不易于维护的。最好的方法是我们把所有学生信息写在一个单独的文件中,每次程序读取文件来获取学生信息,这样我们每次修改学生信息只需要在那个文件中修改即可。所以下一节我们会介绍如何读写文件。我们下一节再见吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350