就像其他内建类型一样,字典也有方法。这些方法非常有用,但是可能不会像列表或者字符串方法那样被频繁使用,以下是一些具体的方法。
1.clear方法
clear方法清除字典中所有的项。这是个原地操作(类似于list.sort),所以无返回值(或者说返回None)
下面来分析以下两种情况:
第一种: 第二种:
两种情况中,x和y最初对应同一个字典。情况一中,我将通过将x关联到一个新的空字典来“清空”它,这对y一点影响也没有,它还原到原先的字典中。这可能是所需要的行为,但是如果真的想清空原始字典中的所有元素,必须使用clear方法。
2.copy方法
copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制,因为值本身就是相同的,而不是副本)
可以看到,当在副本中替换值的时候,原始字典不受影响,但是,如果修改了某个值(原地址修改,而不是替换),原始字典也会改变,因为同样的值也存储在原字典中
避免这个问题的一种方法就是使用深复制,复制其包含的所有值。可以用copy模块的deepcopy函数来完成操作:
3.fromkeys
fromkeys方法使用给定的键建立新的字典,每一键都对应一个默认的None
刚才的例子中首先构造了一个空字典,然后调用它的fromkeys方法,建立另一个词典。此外,您还可以直接在dict上调用该方法,前面讲过,dict是所有字典的类型
如果不想使用None作为默认值,也可以以自己提升默认值。
4.get方法
get方法是个更宽松的访问字典项的方法。一般来说,如果试图访问字典中不存在的项时会出错。
可以看到,当使用get访问一个不存在的键的时候,没有异常,而得道了None的值,还可以自定义默认值,替换None
如果键存在,get用起来就像是普通的字典查询一样:
5.has_key
has_key方法可以检验字典中是否含有特定的键。表达式d.has_key(k)相当于表达式k in d。使用哪个方法很大程度上取决于个人的喜好。
6.items和iteritems
items方法所有项以列表方式返回,列表中的每一项都表示为(键,值)对的形式但是项在返回时并没有遵循待定的次序。
7.key和iterkeys
keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。
8.pop
pop方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除。
9.popitem
popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但是不同的是,popitem弹出随机的项,因为字典并没有“最后的元素”或者其他有关顺序的概念。若想一个接一个地移除并处理,这个方法就非常有效了
尽管popitem和列表的pop方法很类似,但是字典没有与append等价的方法。因为字典是无序的。类似于append的方法是没有任何意义的。
10.setdefault
setdefault方法在某种程度上类似于get方法,能够获得与之给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。
可以看到,当键不存在的时候,setdefault返回默认值并且相应的更新字典。如果键存在那么就返回与其对应的值,但是不改变字典。默认值是可选的,这点和get一样。如果不设定会默认使用None。
11.update
update方法可以利用一个字典更新另一个字典:
提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。
update方法可以使用与调用dict函数同样的方式进行调用,这点在本章前面已经讨论。这意味着update可以和映射,拥有(键-值)对的队列(或者其他可迭代的对象)以及关键字参数一起调用。
12.values和itervalues
values方法以列表形式返回字典中的值(itervalues返回值的迭代器)。与返回键的列表不相同的是,返回值的列表中可以包含重复的元素: