Python 字典 (4) 持续更新
字典一种用名字来引用值的数据结构,这种数据结构称为 映射(mapping) 。字典中的键可以是数字、字符串和元组。
字典 创建和使用
创建
phonebook = {'Aaron':13300000000,'Beth':13311111111,'Alice':13322222222}
键和值用 : 隔开
项之间的用 , 隔开
整个字典 大括号扩起来 { }
Dict函数 创建 和 访问
>>> phonebook = dict(Aaron=13300000000,Beth=13311111111) >>> phonebook['Aaron'] 13300000000L
字典操作
字典大部分函数和序列类似:
- len(dict) 返回dict中 项 数量
- d[k] 返回 字典 K 键 值
- d[k] = v 修改值
- del d[k] 删除项
- k in d 检查是否包含 k 键 项
键的类型必须是不可变的类型,如浮点型、字符串和元组。
>>> x = [] >>> x[42] = 'Foobar' Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list assignment index out of range >>> x = [None] * 43 >>> x[42] = 'Foobar' >>> x[42] 'Foobar'
>>> x = {} >>> x[42] = 'Foobar' >>> x[42] 'Foobar'
代码示例 电话本例子
people = { 'Alice':{ 'phone':'23454', 'addr':'Address 1' }, 'Aaron':{ 'phone':'888546', 'addr':'Address 2' } } name = raw_input('Name:') if name in people: info = people[name]; print "%s's %s %s" % (name,info['phone'],info['addr']);
字典 格式化字符串
>>> phonebook = {'Aaron':456453,'Cecil':32588} >>> 'Aaron\'s phone number is %(Aaron)s' % phonebook "Aaron's phone number is 456453"
只要要格式化的键,能在字典里找到,就能转换。一般在html模板里,非常有用。
同样也可以在 string.Template 使用
>>> phonebook = {'Aaron':456453,'Cecil':32588} >>> from string import Template >>> tempLate = Template('Aaron\'s phone number is %(Aaron)s') >>> tempLate.substitute(phonebook) "Aaron's phone number is %(Aaron)s"
字典方法
示例一 clear
clear 清除字典所有项
>>> phonebook = {'Aaron':456453,'Cecil':32588} >>> phonebook {'Aaron': 456453, 'Cecil': 32588} >>> phonebook.clear() >>> phonebook {}
示例二 copy
copy 返回一个字典(浅复制)的一个新字典
浅复制示例
>>> a = {'name':'name1','info':[1,2,3,4,5]} >>> b = a.copy() >>> a,b ({'info': [1, 2, 3, 4, 5], 'name': 'name1'}, {'info': [1, 2, 3, 4, 5], 'name': ' name1'}) >>> b['name'] = 'name2' >>> a,b ({'info': [1, 2, 3, 4, 5], 'name': 'name1'}, {'info': [1, 2, 3, 4, 5], 'name': ' name2'}) >>> a['info'].remove(2) >>> a,b ({'info': [1, 3, 4, 5], 'name': 'name1'}, {'info': [1, 3, 4, 5], 'name': 'name2' })
深复制示例
需要用到 copy模块的deepcopy函数
>>> from copy import deepcopy >>> b = deepcopy(a) >>> a['info'].remove(3) >>> a,b ({'info': [1, 4, 5], 'name': 'name1'}, {'info': [1, 3, 4, 5], 'name': 'name1'})
示例三 fromkeys
fromkeys 设置字典的键,修改指定值
>>> a = {} >>> a.fromkeys(['name','info'],'string') {'info': 'string', 'name': 'string'}
如果不设置默认值,将是 None
>>> a.fromkeys(['name','info']) {'info': None, 'name': None}
如果该键已经存在字典中,仍然会修改字典。
示例四 get
获得字典键对应的值,当访问不存在的键,没有任何异常,会得到None,也可以定义默认的值。
>>> a = {'name':'Aaron'} >>> a['name'] 'Aaron' >>> a.get('name') 'Aaron' >>> a['age'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age' >>> a.get('age') >>> print a.get('age') None >>> print a.get('age','N/A') N/A
使用字典的示例
people = { 'Alice':{ 'phone':'23454', 'addr':'Address 1' }, 'Aaron':{ 'phone':'888546', 'addr':'Address 2' } } name = raw_input('Name:') request = raw_input('Request:') info = people.get(name) if info: requestInfo = info.get(request,"No Info") else: requestInfo = "No Info" print 'name:%s %s:%s' % (name,request,requestInfo)
运行结果
C:\Users\ChengXu1\Desktop>python aa.py Name:a Request:a name:a a:No Info C:\Users\ChengXu1\Desktop>python aa.py Name:aa Request:s name:aa s:No Info C:\Users\ChengXu1\Desktop>python aa.py Name:Aaron Request:phone name:Aaron phone:888546 C:\Users\ChengXu1\Desktop>python aa.py Name:Aaron Request:23 name:Aaron 23:No Info
get方法可以在用户输入我们未准备的情况,也能做出合理反应。
示例五 has_key
has_key 在Python3.0中已不存在,作用和 k in dict 一样,检查字典中是否含有特定的键。
示例六 items 和 iteritems
items 以列表形式返回
iteritems 返回一个迭代器对象
people = { 'Alice':{ 'phone':'23454', 'addr':'Address 1' }, 'Aaron':{ 'phone':'888546', 'addr':'Address 2' } } print people.items() iters = people.iteritems() print iters print list(iters)
运行结果
C:\Users\ChengXu1\Desktop>python aa.py [('Aaron', {'phone': '888546', 'addr': 'Address 2'}), ('Alice', {'phone': '23454 ', 'addr': 'Address 1'})] <dictionary-itemiterator object at 0x00000000026E2C78> [('Aaron', {'phone': '888546', 'addr': 'Address 2'}), ('Alice', {'phone': '23454 ', 'addr': 'Address 1'})]
示例七 keys 和 iterkeys
keys 返回字典中的键以列表形式返回
iterkeys 返回针对键的迭代器
示例八 pop
pop 返回字典给定的键的值,并从字典中删除
>>> a = {'n':1111} >>> a {'n': 1111} >>> a.pop('n') 1111 >>> a {}
示例九 popitem
popitem方法 弹出一个随机项,并从字典删除该项,返回的该项是 以 键,值 元组形式
>>> a = {'n':1,'b':2} >>> a.popitem() ('b', 2)
示例十 setdefault
setdefault 返回字典对应键值,如果不存在,返回默认值
>>> a = {'n':1111} >>> print a.setdefault('n') 1111 >>> print a.setdefault('b','AA') AA >>> print a {'b': 'AA', 'n': 1111}
示例十一 update
update 一个字典项更新另外一个字典
>>> a = {'b': 'AA', 'n': 1111} >>> b = {'b':'cc'} >>> a.update(b) >>> a {'b': 'cc', 'n': 1111}
>>> b = {'c':11}
>>> a.update(b)
>>> a
{'c': 11, 'b': 'cc', 'n': 1111}
>>>
提供的字典中的项会被添加到旧的字典中,若有相同的则会覆盖。
示例十二 values 和 itervalues
values 以列表的形式放回字典中的值
iterkeyvalues 返回字典中值的迭代器