映射:一种通过名字来引用值的数据结构
字典是python中唯一内建的映射类型,字典中没有特定的顺序,但都存储在一个特定的键(key)下。
键可以使数字、字符串、元组
字典的目的:通过轻松查找某个特定的词语(键),从而找到它的定义(值)
>>> phonebook={'asd':'123','qwe':'456','zxc':'789'}
>>> phonebook['asd']
'123'
dict函数对其他映射(比如字典)或者(键、值)对的序列进行建立字典
>>> d=dict(item)
>>> item=[('name','asd'),('age','23')]
>>> d=dict(item)
>>> d
{'age': '23', 'name': 'asd'}
>>> d['name']
'asd'
字典和列表的区别
键可以是任意的不可变类型,字典是无序的
k in d(d为字典)查找的是键,不是值
>>> x=[]
>>> x=[43]='asd'
SyntaxError: can't assign to literal
>>> z={}
>>> z[32]='asd'
>>> z
{32: 'asd'}
字典的格式化转化字符串
>>> phonebook={'asd':'123','qwe':'456','zxc':'789'}
>>> "'asd's number is %(asd)s" % phonebook
"'asd's number is 123"
字典的方法
clear 清除字典中的所有项,若字典关联到一个新的字典中去,想要清除原先的字典,必须用clear
>>> z
{32: 'asd'}
>>> z.clear()
>>> z
{}
copy
格式:x=y.copy()
>>> x={'asd':'123','qwe':'456','zxc':['789','098']}
>>> y=x.copy()
>>> y['asd']='345'
>>> y['zxc'].remove('789')
>>> y
{'qwe': '456', 'zxc': ['098'], 'asd': '345'} ###在副本直接替换值时,原字典不受影响
>>> x
{'qwe': '456', 'zxc': ['098'], 'asd': '123'} ###如果修改了某个值(原地修改,而不是替换,则会影响原始字典)
要解决这个问题可以用深复制deepcopy
from copy import deepcopy #引入deepcopy
fromkeys:使用给定的键建立新的字典
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'],'asdf')
{'age': 'asdf', 'name': 'asdf'}
get 更宽松访问字典项的方法
>>> d['asd']='123'
>>> d.get('asd')
'123'
没有值时返回None
has_key:用于检查字典中是否含有特定的键。d.has_key(k) 相当于k in d
返回的是true或者false
items将字典所有项一列表方式返回,iteritems方法的作用和items的相同,但是会返回一个迭代器对象,具体迭代器内容在第九章
>>> phonebook={'asd':'123','qwe':'456','zxc':'789'}
>>> phonebook.items()
[('qwe', '456'), ('zxc', '789'), ('asd', '123')]
>>> phonebook.iteritems()
keys将字典中的键以列表形式返回,而iteritems则返回针对键的迭代器
pop可获得对应键的值,并将该键—值在字典中移除
popitem弹出随机的项
setdefault可以获得给定键相关联的值,还可以在字典中不含有给定键的情况下设定相应的键值
update 可以利用一个字典项更新另一个字典(直接插入)
>>> x={'asd':'123','qwe':'456','zxc':'789'}
>>> y={'ald':'173','qie':'426','opc':'736'}
>>> x.update(y)
>>> x
{'zxc': '789', 'asd': '123', 'qie': '426', 'qwe': '456', 'opc': '736', 'ald': '173'}
>>> y
{'qie': '426', 'ald': '173', 'opc': '736'}
value 是以列表的形式返回字典中的值,itervalue返回值的迭代器