python dictionary
字典由对个键以及与其对应的值构成
可以如下创建:
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
dict函数
>>> items = [('name','qiaoc'),('age',26)]
>>> d=dict(items)
>>> d
{'age': 26, 'name': 'qiaoc'}
>>> d['name']
'qiaoc'
还可以通过关键字参数来创建字典
>>> d=dict(id='111',name='qiao')
>>> d
{'name': 'qiao', 'id': '111'}
--------------------基本操作---------------------------------
>>> d
{'name': 'qiao', 'id': '111'}
>>> len(d) -------------- len 返回键值对的数量
2
>>> d['id'] -------d[k] 返回关联到k上的值
'111'
>>> d['id'] = '123' ----将值关联到对应的key上
>>> d['id']
'123'
>>> d
{'name': 'qiao', 'id': '123'}
>>> del d['id'] ----------删除键为key的项
>>> d
{'name': 'qiao'}
>>> 'name' in d ---------检查d中是否含有'name'的项
True
注意:第一点 ,键可以为任何不可改变类型 --- 字典最强大的地方
第二点,如下:
>>> x=[]
>>> x[2]='fllo'
Traceback (most recent call last):
File "<pyshell#241>", line 1, in <module>
x[2]='fllo'
IndexError: list assignment index out of range
>>> x={}
>>> x[2]='fllo'
>>> x
{2: 'fllo'}
字典格式化字符串
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
>>> "qiao's phone is %(qiao)s." % phonebook
"qiao's phone is 119."
>>> template = '''<html>
<head><title>%(title)s</title></head>
<body>...</body>'''
>>> data={'title':'My Home Page'}
>>> print template % data
<html>
<head><title>My Home Page</title></head>
<body>...</body>
----------------------------字典方法--------------------------------
1. clear方法
清除字典中的所有项
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
>>> return_value = phonebook.clear()
>>> phonebook
{}
>>> return_value
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
>>> phonebook.clear()
>>>
注意:
>>> x={}
>>> y=x
>>> x['key']='val'
>>> y
{'key': 'val'}
>>> x={}
>>> y
{'key': 'val'}
这里x和y最初指向同一个字典,但是后来x关联到一个空字典来清空它,y则还是以前的字典,所以y不变
2.copy方法
返回一个具有相同键-值对的新字典
>>> x={'username':'admin','machines':['foo','bar','baz']}
>>> y=x.copy()
>>> y['username']='qiao'
>>> y['machines'].remove('bar')
>>> y
{'username': 'qiao', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}
注意:当在副本中替换值的时候,原始字典不受影响,但是,如果修改了某个值(原地修改,而不是替换),
原始的字典也会改变,因为同样的值也存储在原字典中,为了避免这个问题可以使用深复制,复制其包含所有的值,如下:
>>> from copy import deepcopy
>>> d={}
>>> d['names']=['Alfred','Brenad']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('Clive')
>>> c
{'names': ['Alfred', 'Brenad', 'Clive']}
>>> dc
{'names': ['Alfred', 'Brenad']}
3. fromkeys 方法
使用给定的键建立新的字典,每个键默认对应的值为None
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'],'(unknowns)') ---可以自己提供默认值
{'age': '(unknowns)', 'name': '(unknowns)'}
4. get 方法
是个更宽松的访问字典的方法
>>> d={}
>>> print d['name']
Traceback (most recent call last):
File "<pyshell#299>", line 1, in <module>
print d['name']
KeyError: 'name'
注意:访问字典中不存在的项时会报错,但是用get就不会报错
>>> print d.get('name')
None
>>> print d.get('name','sasasd') ----当取的key值不存在时可以自己定义返回值
sasasd
5. has_key 方法
检查字典中是否含有给出的键
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
>>> phonebook.has_key('qiao')
True
6. items 和 iteritems
items所有字典项以列表的形式返回,这些项中的每一项都来自于(键值),但是返回时没有特殊的顺序
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
>>> phonebook.items()
[('lisi', '101'), ('zhaowo', '787'), ('qiao', '119')]
iteritems大致相同,但是返回一个迭代器对象而不是列表
>>> it = phonebook.iteritems()
>>> it
<dictionary-itemiterator object at 0x0000000002ED69F8>
>>> list(it)
[('lisi', '101'), ('zhaowo', '787'), ('qiao', '119')]
很多情况使用迭代器效率更高
7. keys 和 iterkeys
keys方法将字典中的键以列表形式返回,iterkeys则返回针对键的迭代器
>>> phonebook={'qiao':'119','lisi':'101','zhaowo':'787'}
>>> phonebook.keys()
['lisi', 'zhaowo', 'qiao']
>>> itk = phonebook.iterkeys()
>>> itk
<dictionary-keyiterator object at 0x0000000002ED6A48>
>>> list(itk)
['lisi', 'zhaowo', 'qiao']
8. pop方法
用来获得对应于给定键的值,然后将这个键-值对从字典中移除
>>> d={'x':1,'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}
9. popitem 方法
类似于list.pop,后者会弹出列表的最后一个元素。但不同的是,popitem弹出随机的项,因为字典并没有“最后元素”的概念,
>>> d={'url':'www.baidu.com','span':'ll','title':'fuck'}
>>> d.popitem()
('url', 'www.baidu.com')
>>> d
{'span': 'll', 'title': 'fuck'}
>>> d.popitem()
('span', 'll')
>>> d
{'title': 'fuck'}
10. setdefault 方法
类似于get方法,获得给定键的值,但是还能在字典中不含有给给定键的情况下设定相应的键值。
>>> d={}
>>> d.setdefault('name','qiao')
'qiao'
>>> d
{'name': 'qiao'}
>>> d['name']='chjao'
>>> d
{'name': 'chjao'}
>>> d.setdefault('name')
'chjao'
>>> d.setdefault('name','qiao')
'chjao'
>>> d
{'name': 'chjao'}
>>> d.setdefault('id')
>>> d
{'name': 'chjao', 'id': None}
11. update 方法
可以利用一个字典项更新另外一个字典
>>> d={'url':'www.baidu.com','span':'ll','title':'fuck'}
>>> x={'name':'qiao','url':'hsaxxc'}
>>> d.update(x)
>>> d
{'url': 'hsaxxc', 'span': 'll', 'name': 'qiao', 'title': 'fuck'}
注意:提供的字典项会添加到旧的字典中,若有相同的键则会进行覆盖
12. values 和 itervalues
values 以列表的形式返回字典中的值,itervalues则返回迭代器,与返回键的列表不同的是,返回值的列表中可以包含重复的元素
>>> d={}
>>> d[1]=1
>>> d[2]=3
>>> d[3]=4
>>> d
{1: 1, 2: 3, 3: 4}
>>> d.values()
[1, 3, 4]
======================================================================