您的位置:首页 > 编程语言 > Python开发

python之字典 2014-4-5

2014-04-05 21:06 302 查看
#字典:当索引不好用时
1.字典 类似于php的关联数组 列表类似于索引数组

2.创建字典
phonebook={'alice':'2100','tom':'1900'}
键值之间用: 项之间用,
空字典{}

字典函数
dict 通过映射将键值序列对建立字典
>>> item=[('name','Gumby'),('age',42)]
>>> d=dict(item)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
'Gumby'

dict也可以通过关键字参数来创建字典
>>> d=dict(name='Gumby',age=42)
>>> d
{'age': 42, 'name': 'Gumby'}
dict如果不带参数 则返回空字典

基本字典操作
len(d)返回d中项(键-值对)的数量
d[k]返回关联到键K上的值
d[k]=v将值关联到键k上
del d[k]删除键为k的项
k in d检查d中是否含有键为k的项
字典和列表的特性
键类型:字典的键不一定为整型数据
自动添加:字典中不存在的项 也可以直接赋值
成员资格:k in d查找的是键而不是值 查成员资格字典比列表更加高效

字典的格式化字符串
>>> phonebook={'alice':'2100','tom':'1900'}
>>> phonebook
{'alice': '2100', 'tom': '1900'}
>>> "alice's phone is %(alice)s."%phonebook
"alice's phone is 2100."
可以根据键提取任意一个值 模板里面用的特别多

3.字典方法
(1)clear 清除字典中所有的项
(2)copy 返回一个具有相同键值对的新字典
浅复制 键本身是相同的 不是副本
>>> x={'name':'admin','machine':['foo','bar','baz']}
>>> y=x.copy()
>>> y['name']='ml'
>>> y['machine'].remove('bar')
>>> y
{'machine': ['foo', 'baz'], 'name': 'ml'}
>>> x
{'machine': ['foo', 'baz'], 'name': 'admin'}
#如果修改的话 原字典会保留原来的值 但是如果删除某个项 原字典也会删除

如果想避免浅复制带来的后果 那就最好使用深复制(deep copy) 复制其包含所有的值
>>> from copy import deepcopy
>>> d={}
>>> d['names']=['after','before']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('cleari')
>>> c
{'names': ['after', 'before', 'cleari']}
>>> dc
{'names': ['after', 'before']}
(3)fromkeys方法使用给定的键建立新的字典 每个键默认对应的值为None
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
也可以这样
>>> dict.fromkeys(['name','key'])
{'name': None, 'key': None}
如果不想使用None作为默认值 也可以自己指定
>>> dict.fromkeys(['name','age'],'(unknown)')
{'age': '(unknown)', 'name': '(unknown)'}

(4)get更宽松的访问字典项的方法 访问不存在的项不会出错 返回None
>>> d={}
>>> d['name']

Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
d['name']
KeyError: 'name'
>>> d.get('name')
>>> print d.get('name')
None
如果为None 可以指定默认值为其他值
>>> print d.get('name','mo')
mo
如果键存在 就像普通的字典查询一样
>>> d['name']='eric'
>>> d.get('name')
'eric'

(5)has_key 检查字典中是否含有给出的键
相当于k in d
d.has_key('name')

(6)items和iteritems
item方法将所有的字典以列表的方式返回
每一项都来自于键值 项在返回时没有特殊的顺序
>>> d={'name':'eang','age':'19'}
>>> d.items()
[('age', '19'), ('name', 'eang')]
iteritems方法作用大致相同 但是会返回一个迭代器对象而不是列表
>>> it=d.iteritems()
>>> it
<dictionary-itemiterator object at 0x02B213F0>
>>> list(it)
[('age', '19'), ('name', 'eang')]
(7)keys和iterkeys
keys方法将字典中的键以列表形式返回 而iterkeys则返回针对键的迭代器
(8)pop方法用来获得对应于给定键的值 然后将这个键值对从字典中移除
>>> d={'x':1,'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}
(9)popitem
类似于list.pop list.pop会弹出列表的最后一个元素 popitem弹出随机项
>>> d={'x':'1','y':'2'}
>>> d
{'y': '2', 'x': '1'}
>>> d.popitem()
('y', '2')
>>> d.popitem()
('x', '1')
>>> d.popitem()
(10)setdefault
setdefault方法在某种程度上类似于get方法,可获得与给定键相关联的值
setdefault 还能在字典中不含有给定键的情况下设定相应的键值
>>> d={}
>>> d.setdefault('name','n/a')
'n/a'
>>> d
{'name': 'n/a'}
>>> d['name']='tom'
>>> d.setdefault('name','n/a')
'tom'
>>> d
{'name': 'tom'}

>>> d={}
>>> print d.setdefault('name')
None
>>> d
{'name': None}

(11)update
update方法可以利用一个字典项更新另外一个字典
>>> d={'name':'tom','age':'33'}
>>> x={'height':'170'}
>>> d.update(x)
>>> d
{'age': '33', 'name': 'tom', 'height': '170'}
(12)values 和itervalues
values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)与返回键的列表不同的是 返回值得列表可以包含重复的元素
>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d.values()
[1, 2, 3]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: