零基础学Python(第2版)
上QQ阅读APP看书,第一时间看更新

4.3.2 字典的访问

字典的访问与元组、列表有所不同,元组和列表是通过数字索引来获取对应的值,而字典是通过key值获取相应的value值。访问字典元素的格式如下所示。


value = dict[key]

字典的添加、删除和修改非常简单,添加或修改操作只需要编写一条赋值语句,例如:


dict["x"] = "value"

如果索引x不在字典dict的key列表中,字典dict将添加一条新的映射(x:value);如果索引x在字典dict的key列表中,字典dict将直接修改索引x对应的value值。

字典与列表不同,字典并没有remove()操作。字典元素的删除可以调用del()实现,del()属于内建函数,直接调用即可。列表可以调用pop()弹出列表中一个元素,字典也有一个pop(),该方法的声明和作用与列表的pop()有些不同。pop()的声明如下所示。


D.pop(k[,d]) -> v

pop()必须指定参数才能删除对应的值。其中,参数k表示字典的索引,如果字典D中存在索引k,返回值v等于D[k];如果字典D中没有找到索引k,返回值为d。

如果需要清除字典中所有的内容,可以调用字典的clear()。下面【例4-7】这段代码演示了这些常用的操作。

【例4-7.py】


01     #字典的添加、删除、修改操作
02     dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}# 定义dict字典
03     dict["w"] = "watermelon"                    # 向字典中增加键为w,值为watermelon的键值对
04     del(dict["a"])                              # 删除字典中键为a 的元素
05     dict["g"] = "grapefruit"                      # 修改字典中键为g的值
06     print (dict.pop("b"))                        # 弹出字典中键为b的元素
07     print (dict)
08     dict.clear()                                    # 清除字典中所有元素
09     print (dict)

【代码说明】

·第2行代码创建字典dict,这里使用字母引用对应的值。

·第7行字典dict输出的结果:{'g':'grapefruit','o':'orange','w':'watermelon'}

·第9行字典dict输出的结果:{}

由于字典是无序的,因此字典中没有append()、remove()等方法。如果需要向字典插入新的元素,可以调用setdefault()。这个方法的使用将在4.3.3小节介绍。

字典的遍历有多种方式,最直接的方式是通过“for…in…”语句完成遍历的任务。下面这段代码演示了字典的遍历操作。


01     #字典的遍历
02     dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}# 定义dict字典
03     for k in dict:
04         print ("dict[%s] =" % k,dict[k])

【代码说明】

·第3行代码使用了“for…in…”语句循环访问字典dict。值得注意的是变量k获取的是字典dict的key值,并没有直接获取value值。因此打印输出时,通过dict[k]来获取value值。

·第4行代码依次输出的结果:


dict[a] = apple
dict[b] = banana
dict[o] = orange
dict[g] = grape

此外,还可以使用字典的items()实现字典的遍历操作,items()返回一个由若干元组组成的列表。下面这段代码演示了items()的使用。


01     #字典items()的使用
02     dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}# 定义dict字典
03     print (dict.items())

【代码说明】本段程序将输出以下结果。


[('a', 'apple'), ('c', 'grape'), ('b', 'banana'), ('d', 'orange')]

可见,items()把字典中每对key和value组成了一个元组,并把这些元组存放在列表中返回。下面将使用字典items()实现字典的遍历。


01     #调用items()实现字典的遍历
02     dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}# 定义dict字典
03     for (k, v) in dict.items():
04         print ("dict[%s] =" % k, v)

【代码说明】第3行代码中的变量k和v分别与字典dict中的key和value值对应,遍历输出的结果如下。


dict[a] = apple
dict[b] = banana
dict[o] = orange
dict[g] = grape

前面的代码都采用字符串作为字典的value值,元组、列表甚至字典都可以作为字典的value值。使用元组、列表或字典作为value值创建的字典,称为混合型字典。下面将说明如何访问混合型字典的内容。

混合型字典的创建格式如下所示。


dict =  {"key1" : (tuple), "key2" : [list], "key3" : {dictionary} …}

下面这段代码演示了混合型字典的创建和访问。


01     #使用列表、字典作为字典的值
02     dict = {"a" : ("apple",), "bo" : {"b" : "banana", "o" : "orange"}, "g" : ["grape","grapefruit"]}
03     print (dict["a"])
04     print (dict["a"][0])
05     print (dict["bo"])
06     print (dict["bo"]["o"])
07     print (dict["g"])
08     print (dict["g"][1])

【代码说明】

·第2行代码创建了一个包含元组、列表和字典的混合型字典。

·第3行代码返回嵌套的元组,输出结果:('apple',)。

·第4行代码使用了双下标访问元组的第1个元素,输出结果:apple。

·第5行代码返回嵌套的字典,输出结果:{'b':'banana','o':'orange'}。

·第6行代码使用双下标访问嵌套字典中key值“o”对应的value值,输出结果:orange。

·第7行代码返回嵌套的列表,输出结果:['grape','grapefruit']。

·第8行代码返回嵌套列表中的第2个元素的值,输出结果:grapefruit。