Python基础教程(第2版)学习笔记_015:第4章 字典(续2)
时间:2011-03-18 来源:谢晖
1、字典当中的格式化字符串
在第3章中,已经见过如何使用字符串格式化功能来格式元组中的所有元素,那么如果使用(只限于字符串作为键的)字典而不是元组来做这个工作,应该如何操作呢?
比较简单:在每个转换说明符(%)后面,加上(用圆括号括起来的)键,后面再跟上其他说明元素即可。
>>> phonebook={'Beth':'9102','Alice':'2341'} '建立一个字典
>>> "Alice's phonebook is %(Alice)s"%phonebook['Alice'] '怎么出错了?
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
"Alice's phonebook is %(Alice)s"%phonebook['Alice']
TypeError: format requires a mapping
>>> "Alice's phonebook is %(Alice)s"%phonebook '这句怎么可以通过呢?
"Alice's phonebook is 2341"
哦,出错的那行在后面多了个['Alice']!这样写不对吗?调用字典中的键就应该这样写啊!没错,是应该这样写,但注意格式化字符串中是不是已经出现了('Alice')?对,就是这儿,写成这种样式已经说明是对字典进行格式化了,并且也同时指定了就是字典phonebook中的键Alice进行格式化.
当以这种方式使用字典时,只要在字典中可以找到键,就可以对任意数量的对应的值进行格式化操作.
2.字典的方法
①clear----清除字典中的所有项,既然都清除掉了,当然没有返回值了(为了统一,也可以说返回None)
>>> d={}
>>> d['n1']=1
>>> d
{'n1': 1}
>>> d['n2']=2
>>> d
{'n1': 1, 'n2': 2}
>>> d.clear()
>>> d
{}
>>> value=d.clear()
>>> print(value)
None
能看明白吗?不多解释了.
有个问题:如果我想清空字典里的项,完全可以通过x={}来实现,并不需要这个方法,clear方法是不是有什么特别的地方?
有,它清除的目标是原始字典,也就是说原来与原始字典相关联的字典(比如复制的新字典)的项也一并被清除,而不会像x={}那样只是清除了字典x的项,而不波及其它的字典.
举例如下:
>>> x={}
>>> x['n1']=1
>>> y=x
>>> y
{'n1': 1}
>>> x.clear()
>>> y
{}
分析上面的程序:由于y字典是通过赋值获得的,即字典x与字典y是指向同一原始字典{'n1':1},如果对x字典应用了clear方法的话,那么也一并把y字典的项也清除了.
再看下面的例子:
>>> x={}
>>> x['n1']=1
>>> y=x
>>> x={}
>>> x
{}
>>> y
{'n1': 1}
分析上面的程序:虽然y字典也是通过赋值获得的,但如果只是应用了x={}来清除字典x中的项,但对y字典没有任何影响.
下面有段程序需要解释:
>>> x={}
>>> x['n1']=1
>>> y=x
>>> x.clear()
>>> x['n1']=1
>>> x
{'n1': 1}
>>> y
{'n1': 1}
>>>
发现一个问题:对字典x执行clear方法后,字典x与y中的项均被清除,但如果对字典x重新添加键/值的话,字典y也就同步添加了.
而如果对字典x执行x={}后,字典x的变化对字典y不会产生任何影响,并且即使是对字典x重新添加键/值,也不会影响字典y.
为什么会这样呢?因为clear方法清除的字典x与字典y所共同指向的原始字典,但未解除它们之间的关联关系;x={}清除的仅是字典x的项,对y字典无任何影响,并且解除了字典x与字典y的关联关系.
用个思维导图是不是更清楚一些?