《Python基础教程》Lesson04 - 字典:当索引不好用时

字典的使用

 

在某些情况下,字典比列表更加适用:

  • 表示棋盘状态:每个键都是由坐标值组成的元组;
  • 存储文件修改次数,用文件名作为键;
  • 数字电话,地址簿;

 

创建和使用字典

 

字典由多个键及与其对应的值构成的;

例:

phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

其中名字键,电话号码是值,每个键和他的值之间用冒号:隔开,键之间用逗号,隔开,而整个字典由一对大括号括起来;

注意:字典中的键是唯一的(其他类型映射也是如此),而值并不一定;

 

dict 函数

 

可以用dict函数,通过其他映射或者(键,值)这样的序列创建字典,例:

019_thumb

 

 

基本字典操作

 

很多方面与序列(sequence)类似:

len(d):返回d中项(键:值对)的数量;

d[k]:返回某键上的值;

d[k] = v:将v值关联到键k上;

del d[k]:删除键为k的项;

k in d:检测d中是否含有键为k的项;

但是字典和列表也有一些区别:

键类型:字典的键不一定为整型数据,可能是浮点数、字符串或元组;

自动添加:即使起初那个键在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项;

成员资格:k in d 查找的是键,而不是它的值;

例:

0114_thumb

例:使用人名作为键创建字典,每个人用一个字典;

代码:

0124_thumb01-14_thumb

运行结果:

01-24_thumb

 

字典的格式化字符串

 

如果使用字典来格式化字符串,在每个转换说明符(conversion specifier)%字符后面,可以加上用圆括号括住的键名,后面再跟上其它说明元素;

例:

0134_thumb

例:使用字典格式化HTML文档;

代码:

0144_thumb

运行结果:

01-114_thumb

 

字典方法

 

clear

用于清楚字典中的所有项;

例:

0154_thumb

再看一种情况:

0164_thumb

x和y指向同一个字典,如果将x关联到一个新的空字典(x = {}),y不受影响,但是如果执行x.clear(),那么原字典会被清空,y也会受到影响;

 

copy

该方法返回一个具有相同键-值对的新字典;

例:

0174_thumb

这个方法实现的是浅复制(shallow copy),在副本中替换值的时候,原字典不会受到影响,如果修改了某个值,原字典也会改变;

为了避免这个问题,使复制的字典与原字典独立开,可是使用深复制(deep copy),使用copy模块的deepcopy函数:

0184_thumb

 

fromkeys

该方法给一个给定的键建立新的字典,每个键默认为None;

例:

0194_thumb

也可以使用字典类型dict:

01104_thumb

 

get

它是一种更为宽松的访问字典项的方法,一般试图访问字典中不存在的项时会出错,而get不会;

例:

01114_thumb

另外还可以设置get获取不存在项返回的默认值,如果键存在get就会返回键值;

例:使用get的简单数据库;

代码:

01124_thumb01-124_thumb

运行结果:

01-214_thumb

get带来的灵活性使程序在用户输入我们并未准备的值时也能做出合理的判断;

 

has_key

该方法用于检查字典中是否有给出的键,类似 k in d,在Python3.0中将不包括这个函数;

例:

01134_thumb

 

items和iteritems

items方法将所有的字典项以列表方返回,列表中的每一项都来自于(键,值),但是返回时并没有特殊的排序;

例:

01144_thumb

iteritems方法大致相同,但是它会返回一个迭代器对象而不是列表,例:

01154_thumb

很多情况下使用iteritems更高效;

 

keys和iterkeys

keys方法将字典中的键以列表形式返回,而iterkeys则返回指向键的迭代器;

例:

01164_thumb

 

pop

该方法用来获得对应给定键的值,然后将这个键-值对从字典移除;

 

例:

01175_thumb

 

popitem

该方法类似list.pop,list.pop会弹出列表的最后一个元素,但是字典不存在顺序的概念(无序的),popitem会弹出随机的项;

例:

01184_thumb

popitem可以一个接一个的弹出并移除项;

 

setdefault

类似get方法,可以获取给定键的值,此外,还能在字典中未存在给定值的情况下设定相应的键值;

例:

01194_thumb

可以看出,当键不存在时,setdefault会用它的默认值出更新字典,如果键存在,则会返回该键对应的值;

setdefault的默认值是可选的,如果不设定会使用默认的None,例:

01204_thumb

 

update

该方法可以利用一个字典去更新另一个字典;

例:

01214_thumb01-134_thumb

提供作为参数的字典中的项会被添加到旧字典,若有相同键时会进行覆盖;

 

values和itervalues

values方法以列表形式返回字典中的值,itervalues返回迭代器;

例:

01224_thumb

与返回键的列表不同的是,返回值的列表中可以包含重复的元素;

posted @ 2012-11-29 11:48  z_ero  阅读(2037)  评论(0编辑  收藏  举报