字典是一种通过名字引用知的数据结构,这种结构类型成为映射(mapping) , 字典是Python中唯一的内建映射类型. 字典中得知并没有特殊的顺序,但是都存储在一个特定的键(key)里, 建可以是数字,字符串甚至是元组.
4.1 字典的使用
类似于C++ 中的map.
4.2 创建和使用字典
字典可以通过下面的方式创建
:
>>> phonebook = {'Alice':'2341','Beth':'9102','Cecil':'3258'}
4,2,1 dict 函数
可以同dict函数,通过其他映射(比如其他字典) 或者(键,值)这样的序列对建立字典
>>> items=[('name','gumby'),('age',42)]
>>> d = dict (items)
>>> d
{'age': 42, 'name': 'gumby'}
dict函数也可以通过关键字参数来创建字典
>>> d = dict(name = 'gumby',age=42)
>>> d
{'age': 42, 'name': 'gumby'}
4.2.2 字典的基本操作
字典的基本操作在很多方面与序列(sequence)类似:
len(d) 返回d中项(键-值对)的数量
d[k] 返回关联到键k上的值
d[k]=v 将值v关联到键k上
del[k] 删除键为k的项
k in d 检查的中是否含有键为k的项 .
尽管字典和列表页有很多特性相同,但也有下面以下重要区别
键类型: 不一定整数, 浮点型,字符串,元组都有可能
自动添加: 即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立一个新的项 (所以说 Python 中的字典基本就是C++ 中的map)
成员资格 : key in d 查找的是键,而不是值.
字典示例 : 用字典嵌套字典建立简单数据库:
>>> family= {
'Liang' :
{
'phone' : '150',
'add': 'fushun'
},
'Xu':
{
'phone' : ' 139',
'add' : 'huludao'
}
}
查询: family['Liang']['add']
4.2.3 字典的格式化字符串
>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> "Cecil's phone number is %(Cecil)s."%phonebook
"Cecil's phone number is 3258."
1 clear()
清空字典中的所有元素
2 copy
返回具有相同键-值对的新字典
>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> y=phonebook.copy()
>>> y
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
此处为浅复制, 当原始字典修改值(不是替换)时,副本也受影响 . 未解决这个问题,可以使用深复制: deepcopy
>>> e={}
>>> e
{}
>>> e['name']=['a','b']
>>> e
{'name': ['a', 'b']}
>>> c=e.copy()
>>> dc=deepcopy(e)
>>> e['name'].append('c')
>>> c
{'name': ['a', 'b', 'c']}
>>> dc
{'name': ['a', 'b']}
>>> e
{'name': ['a', 'b', 'c']}
3 fromkeys
使用给定的键家里新的字典, 每个键对应的值为None .
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}
也可以使用自己的默认值
dict.fromkeys(['name','age'],'(unknow)')
{'age': '(unknow)', 'name': '(unknow)'}
4 get
是一种更宽松的访问字典的方法, 此种方法访问字典中不存在的的项时不会出错
>>> d={}
>>> print d['name']
Traceback (most recent call last):
File "", line 1, in
print d['name']
KeyError: 'name'
>>> print d.get('name')
None
这里也可以返回默认值
>>> print d.get('name','N/A')
N/A
5 has_key
检查字典中是否含有给出的键
>>> d.has_key('name')
False
6 items和iteritems
items 将字典所有项以列表方式返回
>>> x
{'Beth': '9101', 'Alice': '2341', 'Cecil': '3258'}
>>> x.items()
[('Beth', '9101'), ('Alice', '2341'), ('Cecil', '3258')]
7 keys和 iterkeys
keys将所有字典中的键以列表方式返回, iterkeys返回迭代器
8pop
pop 用来获得应用于给定键的值,然后将这个键-值从字典中删除
>>> x
{'Beth': '9101', 'Alice': '2341', 'Cecil': '3258'}
>>> x.items()
[('Beth', '9101'), ('Alice', '2341'), ('Cecil', '3258')]
>>> x.pop('Beth')
'9101'
9 popitem
弹出随机的项. 字典中不存在有关顺序的概念(与map不同) ,若想一个接一个的移除并处理项,这个方法将非常有用.
>>> y
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> y.popitem()
('Beth', '9102')
>>> y
{'Alice': '2341', 'Cecil': '3258'}
10 setdefault
某种程度上类似于get, 就是能够获得与给定键相关联的值, 除此之外,还能在字典不含相应键值的情况下设置相应键值
>>> y.setdefault('L','N/A')
'N/A'
update可以用一个字典更新另一个字典
>>> x
{'Alice': '2341', 'Cecil': '3258'}
>>> y
{'Alice': '2341', 'L': 'N/A', 'Cecil': '3258'}
>>> x.update(y)
>>> x
{'Alice': '2341', 'L': 'N/A', 'Cecil': '3258'}
12 values 和itervalues
values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)
>>> y
{'Alice': '2341', 'L': 'N/A', 'Cecil': '3258'}
>>> y.values()
['2341', 'N/A', '3258']