字典是Python唯一内建的映射类型。字典是键值对的集合。
1.1 字典的使用
某些情况下字典更加好用,比如一个电话列表。注意:电话号码只能用字符串数字表示,否则会出问题。因为电话号码一旦以0开头,就有可能被当做8进制解析,为了避免这个麻烦,就用字符串表示就可以了。用引号包住数字即可。
1.2 创建和使用字典
字典可以通过下面的方式创建:
变量名 = {键名:值名,键名:值名....}
注意:用引号包起来,键值对合在一起被称作项。键和值中间用冒号隔开,项之间用逗号隔开,所有的项用大括号包起来,叫做字典。空字典就是一对大括号{}.
例如
phonebook = {'Alice':'1234','Beth':'9102'}
1.2.1 dict函数
可以用dict函数,通过其他映射比如字典或者(键,值)来建立字典
>>> items = [('name','Gumble'),('age',42)] >>> d = dict(items) >>> d {'age': 42, 'name': 'Gumble'} >>> d['name'] 'Gumble'
dict函数也可以通过关键字参数来创建字典
>>> d = dict(name = 'Gumble',age = 42) >>> d {'age': 42, 'name': 'Gumble'}
1.3 基本字典操作
字典很多基本行为与序列类似,以字典d为例
1.len(d)返回d中项(键值对)的数量
2.d[k]返回关联到键k上的值
3.d[k] = v,修改d[k]索引的值
4.del d[k]删除键为k的项
5.k in d检查d中是否有含有键为k的项
尽管字典和列表有很多特性相同,但也有一些区别,如下:
1.键值类型:字典的键值不一定为整型数据,也可能是其他不可变类型,如浮点型、字符串或元组,甚至是一个字典
2.自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立一个新的项,而列表在不适用append方法或者其他类似操作时,不能将值关联到列表范围之外的索引上。
3.成员资格:表达式k in d (d为字典)查找的键,而不是值,表达式v in l(l为列表)则用来查找值,而不是索引
在字典中检查键的成员资格比在列表中检查值的成员资格更高效,数据结构规模越大,两者效率差距越明显。
下面是一个存储号码的字典示例
''' Created on 2013-8-3 @author: Landau ''' #coding=utf-8 #简单数据库 #使用人名作为键的字典,phone表示电话,addr表示地址 people = { 'Alice':{ 'phone':'1345', 'addr':'abcd' }, 'Bob':{ 'phone':'232', 'addr':'adfasf' } } #针对电话号码用的描述性标签 labels = { 'phone':'phone number', 'addr':'address' } name = raw_input('Name: ') request = raw_input('Phone number(p) or address(a)?') #使用正确的键 if(request == 'p'):key = 'phone' if(request == 'a'):key = 'address' #如果名字是字典中有效的键,才会答应 if(name in people):print "%s's %s is %s" % (name,labels[key],people[name][key]) Name: Alice Phone number(p) or address(a)?p Alice's phone number is 1345