字典,是Python中唯一内建的映射数据结构类型。
这里的映射是指通过名字引用值。
字典中的值并没有特殊的顺序,值都是存储在一个特定的键里。
键可以是数字、字符串甚至是元祖。
什么是键,什么是值,怎么映射呢? 请继续看下去。
创建和使用字典:
下面来创建一个小型的数据库,来记录名字和电话号码
>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}
名字是键,电话号码是值。键和值通过符号:来对应,形成映射关系。
我们把一对键值称为项。
字典就是有这用多个键值形成的项组成。
字典中的键是唯一的,即同一字典中不会出现两个相同的键。字典中值不唯一。
空字典有两个大括号组成,即{}。
除了用{}直接创建字典外,还可以用函数dict()来创建映射。通过(键,值)这样的序列对来建立字典。
>>> item = [('name', 'Cumby'), ('age', '42')]
>>> d = dict(item)
>>> d
{'age': '42', 'name': 'Cumby'}
>>>
字典的基本操作:
len(d)返回d中项的数量
d[k]返回键为K对应的项
d[k]=v 将值v关联到键k上
del d[k] 删除键值为k的项
k in d 检查d中是否有含有键为k的项
字典和列表有很多特性相同,但也有以下一些重要的区别:
字典的键类型不一定为整型数据,可以是其他不可变类型(浮点,字符串,元组)
字典可以直接添加新的项,而列表需要使用append方法。
k in d (d为字典)查找的是键,而不是值。v in l (l为列表)查找的是值,不是索引。
字典数据库:
people = {
'Alice':{
'Phone':'2341',
'addr':'Foo street'
},
'Louis':{
'Phone':'1111',
'addr':'eeee'
}
}
字典格式化字符串:
>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}
>>> "Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
字典方法:
1. clear
clear方法清除字典中所有的项。原地操作,无返回值。
>>> d = {}
>>> d['name'] = 'louis'
>>> d['age'] = '26'
>>> d
{'age': '26', 'name': 'louis'}
>>> returned_value = d.clear()
>>> d
{}
>>> print returned_value
None
2. copy
copy方法返回一个具有相同键-值对的新字典。浅复制。
还有一个深复制 from copy import deepcopy
3. fromkeys
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None.
4. get
get方法能访问字典的项
>>> d = {}
>>> print d['name']
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
print d['name']
KeyError: 'name'
>>> print d.get('name')
None
当使用get访问一个不存在的键时,没有异常,返回None.
也可以之定义一个字符串,代替访问一个存在的键返回的None.
>>> d.get('name', 'N/A')
'N/A'
5. has_key
has_key方法可以检查字典中是否含有给定的键。
含有,则返回Ture
否则,返回False
6. items和iteritems
items方法将所有的字典项以列表方式返回。
>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}
>>> phonebool.items()
[('Louis', '1212'), ('Beth', '9102'), ('Alice', '2341'), ('Cecil', '3258')]
7. keys和iterkeys
keys方法将字典中的键以列表形式返回
iterkeys方法返回针对键的迭代器
>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}
>>> phonebool.keys()
['Louis', 'Beth', 'Alice', 'Cecil']
>>> it = phonebool.iterkeys()
>>> list(it)
['Louis', 'Beth', 'Alice', 'Cecil']
>>>
8.pop和popitem
pop方法用来弹出给定键的值,并且将这个键值从字典中删除。
>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}
>>> phonebool.pop('Louis')
'1212'
>>> phonebool
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
9. setdefault
setdefault方法在某种程度上类似于get方法,能获得给定键所对应的值,它还能在字典中不含有给定键的情况下设定相应的键值。
>>> d={}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'louis'
>>> d.setdefault('name', 'N/A')
'louis'
>>> d
{'name': 'louis'}
>>>
当键不存在的时候,setdefault返回默认值并且相应地更新字典。(默认值是可以自己设置的,和get同理)
如果键存在,那么就返回与其对应的值,但不改变字典。
10. update
update方法可以利用一个字典项更新另外一个字典。
>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}
>>> x={'Louis':'1231'}
>>> phonebool.update(x)
>>> phonebool
{'Louis': '1231', 'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
11. values和itervalues
values方法以列表的形式返回字典中的值(itervalues返回值是迭代器)。
>>> phonebool.values()
['1231', '9102', '2341', '3258']