7.4 映射类型内建方法

字典提供了大量方法来帮我们做事情,见表7.2。

下面说明字典的一些很常见的方法。在上面的例子里,我们已经看到has_key()和它的替代方法in和not in。如我们在7.1小节看到,试图查找一个字典里没有的键值会产生KeyError异常。

基本的字典方法关注他们的键和值。它们有:keys()方法,返回一个列表,包含字典中所有的键,values()方法,返回一个列表,包含字典中所有的值,items(),返回一个包含所有(键,值)元组的列表。这些方法在不按任何顺序遍历字典的键或值时很有用。

7.4 映射类型内建方法 - 图1

keys()方法很有用,它返回一个包含字典中所有键的列表,此方法可以与for循环一起使用来获取字典中的值。

7.4 映射类型内建方法 - 图2

7.4 映射类型内建方法 - 图3

但是,它返回的元素是没有顺序的(和哈希表中的键一样),我们通常希望它们能按某种方式排序。

在Python 2.4版本以前,你只能调用字典的keys()方法获得键的列表,然后调用列表的sort()方法得到一个有序可遍历的列表。现在特别为迭代子设计了一个名为sorted()的内建函数,它返回一个有序的迭代子:

7.4 映射类型内建方法 - 图4

update()方法可以用来将一个字典的内容添加到另外一个字典中。字典中原有的键如果与新添加的键重复,那么重复键所对应的原有条目的值将被新键所对应的值所覆盖。原来不存在的条目则被添加到字典中。clear()方法可以用来删除字典中的所有的条目。

7.4 映射类型内建方法 - 图5

copy()方法返回一个字典的副本。注意这只是浅复制。关于浅复制和深复制请阅读小节6.19。最后要说明,get()方法和键查找(key-lookup)操作符([])相似,不同的是它允许你为不存在的键提供默认值。如果该键不存在,也未给出它的默认值,则返回None。此方法比采用键查找(key-lookup)更灵活,因为你不必担心因键不存在而引发异常。

7.4 映射类型内建方法 - 图6

7.4 映射类型内建方法 - 图7

setdefault()是自2.0才有的内建方法,使得代码更加简洁,它实现了常用的语法:检查字典中是否含有某键。如果字典中这个键存在,你可以取到它的值。如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。这正是执行setdefault()方法的目的。

7.4 映射类型内建方法 - 图8

前面,我们曾简要介绍过fromkeys()方法,下面是更多的示例。

7.4 映射类型内建方法 - 图9

目前,keys()、items()和values()方法的返回值都是列表。数据集如果很大会导致很难处理,这也正是iteritems()、iterkeys()和itervalues()方法被添加到Python 2.2的主要原因。这些函数与返回列表的对应方法相似,只是它们返回惰性赋值的迭代器,所以节省内存。未来的Python版本中,甚至会更灵活,那时这些方法将会返回强大的对象,暂叫做视图(views)。视图是访问容器对象的接口集。举例来说,你可以从一个视图中删除某个字典的键,从而改变某个字典。