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

4.3.3 字典的方法

前面已经使用了一些字典的方法,本节将详细介绍字典的常用方法,使用这些常用方法可以极大地提高编程效率。keys()和values()分别返回字典的key列表和value列表。下面这段代码演示了keys()和values()的使用。


01     dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}# 定义dict字典
02     #输出key的列表
03     print (dict.keys())
04     #输出value的列表
05     print (dict.values())

【代码说明】

·第3行代码返回由字典的key值组成的列表,输出结果:


['a', 'c', 'b', 'd']

·第5行代码返回由字典的value值组成的列表,输出结果:


['apple', 'grape', 'banana', 'orange']

前面已经提到,要获取字典中某个value值,可以使用dict[key]的结构访问。另一种获取value值的办法是使用字典的get(),get()的声明如下:


D.get(k[,d]) -> D[k]

【代码说明】

·参数k表示字典的键值,参数d可以作为get()的返回值,参数d可以默认,默认值为None。

·get()相当于一条if…else…语句,如果参数k在字典D中,get()将返回D[k];如果参数k不在字典D中,则返回参数d。get()的等价语句如下所示:


01     #get()的等价语句
02     D = {"key1" : "value1", "key2" : "value2"}     # 定义dict字典
03     if "key1" in D:                                   # if判断键"key1"是否在字典中
04         print (D["key1"])
05     else:
06         print ("None")

【代码说明】由于在字典D中查找到了key值“key1”,所以输出结果为“value1”。

下面的代码演示了get()的使用。


01     #字典中元素的获取方法
02     dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}# 定义dict字典
03     print (dict)
04     print (dict.get("c", "apple"))          # 使用get获取键为c的值,若不存在返回默认值apple
05     print (dict.get("e", "apple"))          # 使用get获取键为e的值,若不存在返回默认值apple

【代码说明】

·第4行代码由于字典dict存在索引“c”,所以返回key值“c”对应的value值。输出结果:


grape

·第5行代码由于字典dict中不存在索引“e”,所以返回默认值“apple”。输出结果:


apple

采用get()访问字典中的value值减少了代码的长度,而且表达方式容易理解,避免了使用if语句带来的维护代价。

如果需要添加新的元素到已经存在的字典中,可以调用字典的update()。update()把一个字典中的key和value值全部复制到另一个字典中,update()相当于一个合并函数。update()的声明如下所示:


D.update(E) -> None

把字典E的内容合并到字典D中,update()的等价代码如下所示:


01     #udpate()的等价语句
02     D = {"key1" : "value1", "key2" : "value2"}     # 定义D字典
03     E = {"key3" : "value3", "key4" : "value4"}     # 定义E字典
04     for k in E:                                          # 循环遍历E字典
05         D[k] = E[k]                                      # 把字典E中的内容添加到字典D
06     print (D)

【代码说明】第4行代码通过for…in…循环语句访问字典E,并把字典E中的内容逐个添加到字典D中。字典D更新后的结果:


{'key3': 'value3', 'key2': 'value2', 'key1': 'value1', 'key4': 'value4'}

如果字典E中含有与字典D中相同的键值,字典E的值将覆盖字典D中的值。例如:


01     #字典E中含有字典D中的key
02     D = {"key1" : "value1", "key2" : "value2"}
03     E = {"key2" : "value3", "key4" : "value4"}
04     for k in E:
05         D[k] = E[k]
06     print (D)

【代码说明】字典D和字典E都含有一个名为“key2”的键,但是对应的value值并不相同。字典D更新后的结果:


{'key2': 'value3', 'key1': 'value1', 'key4': 'value4'}

字典的update()也存在同样的问题,如果某些key在目标字典中已经存在,则更新后新字典中的值将覆盖原有的值。下面的代码演示了update()的使用。


01     #字典的更新
02     dict = {"a" : "apple", "b" : "banana"}
03     print (dict)
04     dict2 = {"c" : "grape", "d" : "orange"}
05     dict.update(dict2)                # 使用update方法更新dict
06     print (dict)

【代码说明】第5行代码调用update(),把字典dict2的内容更新到字典dict,字典dict原有的内容保持不变。字典dict的输出结果:


{'a': 'apple', 'c': 'grape', 'b': 'banana', 'd': 'orange'}

注意 字典不属于序列,所以字典没有顺序性。update()调用后,字典中各元素的排列顺序是无序。关于序列的概念将在4.4节介绍。

字典的setdefault()可以创建新的元素并设置默认值。setdefault()的声明如下所示。


D.setdefault(k[,d]) -> D.get(k,d)

【代码说明】setdefault()与get()的使用有些相似,参数k表示字典的键值,参数d表示D[k]的默认值。参数d可以省略,默认值为None。如果参数k的值在字典D中,setdefault()将返回get(k,d)获得的结果;如果参数k的值不在字典D中,字典D将添加新的元素D[k],并调用get(k,d)返回参数d的值。

下面的代码演示了setdefault()的使用。


01     # 设置默认值
02     dict = {}               # 定义空字典dict
03     dict.setdefault("a")
04     print (dict)
05     dict["a"] = "apple"
06     dict.setdefault("a", "None")
07     print (dict)

【代码说明】

·第3行代码添加了一个key值为“a”,且设置默认value值为None。setdefault("a")的返回值结果为None。

·第4行代码输出结果:{'a':None}

·第5行代码更新dict["a"]的值为“apple”。

·第6行代码再次调用setdefault(),设置默认的value值为None。

·第7行代码输出字典dict的内容,由于设置了dict["a"]的值为“apple”,即使再次调用setdefault()也不会影响value值,所以dict["a"]的值仍为“apple”,而非“default”。字典dict的输出结果:


{'a': 'apple'}

表4-2列出了字典中常用的一些方法。

表4-2 字典的常用方法