本篇主要记录学习使用字典的笔记。
列表、元组和字符串等均是通过编号进行引用,而对于通过名字引用值的数据结构,则为映射,字典是Python里唯一内建的映射类型。
字典中的值并没有特殊的顺序,都存储在一个特定的键(Key)里,键可以是数字、字符串甚至是元组。
1 创建字典
(1)直接创建
>>> phonebook={'faith':'1852','Alice':'2341'}
每个键和它的值之间用冒号隔开,项之间用逗号隔开,整个字典由一对大括号括起来,空字典为{}
(2) dict函数
>>> items=[('name','Gumby'),('age',42)]
>>> items
[('name', 'Gumby'), ('age', 42)]
>>> d=dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>>
也可以通过关键字参数来创建字典:
>>> d=dict(name='gg',age=42)
>>> d
{'age': 42, 'name': 'gg'}
>>>
2 字典的基本操作
>>> d=dict(name='gg',age=42)
>>> d
{'age': 42, 'name': 'gg'}
>>> len(d)
2
>>> d['age']
42
>>> d['age']='55'
>>> d
{'age': '55', 'name': 'gg'}
>>> 'age' in d
True
>>> '55' in d
False
>>> del d['age']
>>> d
{'name': 'gg'}
>>>
3 字典的格式化字符串
%字符后面加上用圆括号括起来的键,后面再跟上其他说明元素:
>>> 'the year is %(year)s' % d
'the year is 2015'
>>>
4 字典方法
(1) clear
清除字典中所有的项:
>>> d=dict(name='gg',age=42)
>>> d
{'age': 42, 'name': 'gg'}
>>> y=d
>>> y
{'age': 42, 'name': 'gg'}
>>> y.clear()
>>> y
{}
>>> d
{}
>>>
注:对于字典的关联 y=d ,当删除其中一个时,另一个同时也被清除了。
(2)copy
copy方法返回一个具有相同键值对的新字典,是浅复制,当在副本中替换值时,原始字典不受影响,但是如果修改了某个值,原始字典会发生变化:
>>> x={'name':'admin','machines':['foo','bar','zoo']}
>>> y=x.copy()
>>> y['name']='mlh'
>>> y['machines'].remove('bar')
>>> y
{'name': 'mlh', 'machines': ['foo', 'zoo']}
>>> x
{'name': 'admin', 'machines': ['foo', 'zoo']}
>>>
深复制: deepcopy
>>> from copy import deepcopy
>>> d={}
>>> d['name']=['alice','faith']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> c
{'name': ['alice', 'faith']}
>>> dc
{'name': ['alice', 'faith']}
>>> d['name'].append('MOOM')
>>> d
{'name': ['alice', 'faith', 'MOOM']}
>>> c
{'name': ['alice', 'faith', 'MOOM']}
>>> dc
{'name': ['alice', 'faith']}
>>>
(3) fromkeys
使用给定键建立新的字典,每个键默认对应的值为None,当然也可以自定义默认值:
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> {}.fromkeys(['name','age'],'Unknown')
{'age': 'Unknown', 'name': 'Unknown'}
>>>
(4)get
如果键存在,跟普通的字典查询功能一样,如果键不存在,仍能访问,得到的是None或者是自定义的N/A:
>>> d['name']='Eric'
>>> d
{'name': 'Eric'}
>>> d.get('name')
'Eric'
>>> d.get('age')
>>> d.get('age','N/A')
'N/A'
>>>
(5) items和iteritems
items方法将所有的字典项以列表的方式返回:
>>> d={'title':'Python','url':'http://www.python.org','spam':0}
>>> d
{'url': 'http://www.python.org', 'spam': 0, 'title': 'Python'}
>>> d.items()
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python')]
>>>
iteritems作用相同,但是返回的是一个迭代器:
>>> it=d.iteritems()
>>> it
<dictionary-itemiterator object at 0x0134D3C0>
>>> list(it)
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python')]
>>>
多数情况下使用iteritems更高效。
(6)keys和iterkeys
将字典中的键以列表形式返回:
>>> d.keys()
['url', 'spam', 'title']
>>> d.iterkeys()
<dictionary-keyiterator object at 0x0134D360>
>>> list(d.iterkeys())
['url', 'spam', 'title']
>>>
(7) pop
获得对应于给定键的值,并将这个键值对从字典中移除:
>>> d
{'url': 'http://www.python.org', 'spam': 0, 'title': 'Python'}
>>> d.pop('spam')
0
>>> d
{'url': 'http://www.python.org', 'title': 'Python'}
>>>
(8)popitem
随机删除某一键值对项:
>>> d
{'url': 'http://www.python.org', 'title': 'Python'}
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'title': 'Python'}
>>>
(9)update
利用一个字典项去更新另一个字典,如果有相同的键则会进行覆盖,否则添加:
>>> d
{'title': 'Python'}
>>> x={'title':'java'}
>>> d.update(x)
>>> d
{'title': 'java'}
>>>> x={'url':'www.python.org'}
>>> d.update(x)
>>> d
{'url': 'www.python.org', 'title': 'java'}
>>>
(10)values和itervalues
以列表的形式返回字典中的值(itervalues返回值的迭代器):
>>> d
{'age2': 10, 'age1': 10}
>>> d.values()
[10, 10]
>>>