字典
通过轻松查找某个特定的词语(键),从而找到它的定义(值)。键可以是数字、字符串甚至是元组。
创建和使用字典
键-值对成为项,字典由多个项组成,每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,整个字典用一个大括号括起来。
- dict函数:通过其他映射(比如其他字典)或者(键、值)对的序列建立字典。
>>> items = [('name','Gumby'),('age',42)]
>>> d = dict(items)
>>> d
{'name': 'Gumby', 'age': 42}
>>> d['name']
'Gumby'
>>> c = dict(name='Gumby', age=42)
>>> c
{'name': 'Gumby', 'age': 42}
基本字典操作
- len(d)返回d中项(键-值对)的数量。
- d[k]返回关联到键k上的值。
- d[k]=v将值v关联到键k上。
- del d[k]删除键k的项。
- k in d检查字典d中是否含有键为k的项。
键类型,可以是任意不可变类型,如字符串、元组、浮点型(实型)等。
字典的格式化字符串
>>> phonebook = {'Beth':'9102', 'Alice':'2341', 'Cecil':'3258'}
>>> "Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
字典方法
- clear:清除字典中所有的项,无返回值(返回None)。
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x = {}
>>> y
{'key': 'value'}
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> x
{}
>>> y
{}
- copy:返回一直具有相同键-值对的新字典(浅复制)。在副本中替换值,原始字典不受影响,如果修改了某个值(是修改,而不是替换,个人理解:使用列表方法进行修改),原始字典也会发生改变。
>>> x = {'name':'admin', 'machines':['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> x.clear()
>>> x
{}
>>> y
{'name':'admin', 'machines':['foo', 'bar', 'baz']}
>>> x = y.copy()
>>> y['name'] = 'mlh'
>>> x
{'name': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y
{'name': 'mlh', 'machines': ['foo', 'bar', 'baz']}
>>> y['machines'].remove('bar')
>>> x
{'name': 'admin', 'machines': ['foo', 'baz']}
>>> y
{'name': 'mlh', 'machines': ['foo', 'baz']}
>>> x.clear()
>>> y
{'name': 'mlh', 'machines': ['foo', 'baz']}
- 使用深复制(deepcopy)可以解决这个问题,深复制后的字典不受原字典的影响。
>>> from copy import deepcopy
>>> d = {}
>>> d['name'] = ['Alfred', 'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d['name'].append('Clive')
>>> c
{'name': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'name': ['Alfred', 'Bertrand']}
- fromkeys:创建新的字典,每个键对应一个默认的值None,或者自己提供默认值。
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'],'unknown')
{'age': 'unknown', 'name': 'unknown'}
- get:当get访问一个不存在的键时,得到一个默认的值None,或者自己在函数中定义,而如果键存在时,就和普通的字典查询一样。
>>> d = {'name': 'Jack'}
>>> d.get('name')
'Jack'
>>> d.get('addrs', 'Not found')
'Not found'
- has_key:检查字典中是否含有特定的键,返回布尔型。
- items和iteritems:items将字典所有的项以列表的方式返回。itertiems返回一个迭代器对象。
- keys和iterkeys:keys将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。
- pop:获取对应于给定键的值,并将这个键-值对从字典中移除。
- popitem:类似于列表中的pop,但是是随机弹出项,因为没有先后的概念。
- setdefault:功能和get类似,同时当键不存在时,返回默认值,并且更新原字典(即创建一个新键,对应于默认值)。
- update:可以利用一个字典项更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。
- values和itervalues:分别以列表和迭代器对象的形式返回字典中的值。