4.1 字典的使用
4.2创建华为使用字典
字典可以通过下面方式创建:
phonebook={'a':'123','b':'321'}
字典由多个键及与其对应的值构成的对组成,上面例子:名字是键,电话号码是值。键和值之间用:隔开
4.2.1 dict 函数
可以使用dict函数,通过映射(其它字典)或者(键、值)这样的序列对建立字典
>>> test=[('name','test'),('age','22')]
>>> d=dict(test)
>>> d
{'age': '22', 'name': 'test'}
>>> d['name']
'test'
dict也可以通过关键字参数创建字典
>>> d=dict(name='test',age='22')
>>> d
{'age': '22', 'name': 'test'}
如果不带任何参数,dict函数返回一个新的空字典
>>> d=dict()
>>> d
{}
4.2.2 基本字典操作
很多方面和和序列类似:
len(d)返回d中项(键-值)的数量;
d[k] 返回关联到键k上的值;
d[k]=v 将v关联到键k上
del d[k] 删除键k的项
k in d 检查d中是否有含有键为k的项
和列表的区别:
键类型:字典的键有可鞥是浮点型、字符串或者元组,不一定为整型数据
自动添加:即使键不存在,也可以为它分配一个值,字样字典会建立一个新的项。而列表在不使用append的情况下,不能将
                 值关联到列表范围之外的索引上
成员资格: k in d 查找的是键,而不是值。 k in l(列表)则用来查找值
4.2.3 字典的格式化字符串
>>> phonebook={'beth':'9102','alice':'2341','cecil':'3128'}
>>> "cecil's phone number is %(cecil)s" % phonebook
"cecil's phone number is 3128"
4.2.4 字典方法
1、clear 清除字典所有的项
>>> d={}
>>> d['name']='test'
>>> d['age']='100'
>>> d
{'age': '100', 'name': 'test'}
>>> d.clear()
>>> d
{}
2、copy 返回一个具有相同键-值的新字典,浅复制,在副本中替换值的时候,原始字典不受影响,但是如果修改了某个值,原始字典也会改变,避免此问题可以使用深复制(deep copy)
>>> from copy import deepcopy
>>> d={}
>>> d['names']=['alfred','bertrand']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('clive')
>>> c
{'names': ['alfred', 'bertrand', 'clive']}
>>> dc
{'names': ['alfred', 'bertrand']}
3、fromkeys 使用给定的键建立新的字典,每个键默认对应的值为None
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
也可以直接在所有字典的类型dict上面调用方法
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}
也可以提供自己的默认值
>>> dict.fromkeys(['name','age'],('test'))
{'age': 'test', 'name': 'test'}
4、get 一种轻松的访问字典项的方法
>>> d['name']='test'
>>> d.get('name')
'test'
如果值不存在,返回一个none
>>> d.get('a')
>>> print d.get('a')
None
可以自定义默认值,替换none
>>> d.get('a','nofind')
'nofind'
>>> d.get('a','N/A')
'N/A'
5、has_key 检查字典中是否有给出的键 d.has_key(k)相当于 k in d,3.0中无此函数
>>> d={}
>>> d.has_key('name')
False
>>> d['name']='et'
>>> d.has_key('name')
True
>>>
6、items和iteritems
items将所有的字典项以列表方式返回,返回时没有特殊的顺序
d={'title':'python web site','url':'http://www.python.org','spam':0}
>>> d
{'url': 'http://www.python.org', 'spam': 0, 'title': 'python web site'}
>>> d.items()
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]
iteritems会使用迭代的结果返回
>>> it = d.iteritems()
>>> it
<dictionary-itemiterator object at 0x7f56b26ee418>
>>> list(it)
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]
8、pop 获取对应于给定的键值,并将键值从字典移除
>>> d={'x':1,'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}
9、popitem 类似list.pop,后者会弹出列表的最后一个元素,popitem会弹出随机的项
>>> d={'x':1,'y':2,'z':4,'f':4}
>>> d.popitem()
('y', ,2)
10、setdefault 类似于get,除此之外还可以在字典中不含有给定键的情况下设定相应的键值
>>> d={}
>>> d.setdefault('name','N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name']='adsf'
>>> d.setdefault('name','N/A')
'adsf'
>>> d
{'name': 'adsf'}
键值不 存在返回默认值并更新字典,键值存在,返回相对应的值,不设置,默认使用none
>>> d={}
>>> d.setdefault('name')
>>> d
{'name': None}
11、update 利用一个字典更新另外一个字典,有相同的键会覆盖
>>> d={'name':'test','age':'N/A'}
>>> x={'title':'www'}
>>> d.update(x)
>>> d
{'age': 'N/A', 'name': 'test', 'title': 'www'}
12、values和itervalues 以列表的方式返回字典中的值,itervalues返回值的迭代器
>>> d
{'age': 'N/A', 'name': 'test', 'title': 'www'}
>>> d.values()
['N/A', 'test', 'www']
4.3 小结
本章介绍的内容:
映射: 可以使用任何不可变对象表示元素
利用字典格式化字符串:通过在格式化说明符中包括名称(键)来对字典应用字符串格式化操作。
4.3.1 本章的新函数:
dict(seq)                     用(键,值)对(或者映射和关键字参数)建立字典