映射(mapping)---一种通过名字来引用值的数据结构。
字典是ython唯一内建的映射类型。
dict---创建字典的方法 输出
方法一
items = [('name','Gumby'),('age','42')]
d = dict(items)
print d {'age':'42','name':'gumby'}
print d['name'] Gumby
方法二
通过关键字创建字典
d = dict(name = 'Gumby',age = '42')
print d {'age':'42','name':'gumby'}
print d['name'] Gumby
字典的基本操作
1.len(d) 返回d中项(键-值对)的数量
2.d[k] 返回关联到键k上的值
3.d[k]=v 将值v关联到键k上
4.del d[k] 删除键为k的项
5.k in d 检查d中是否有含有键为k的项
字典与列表的区别:
键类型:字典的键不一定为整形数据(但也可以是),键可以是任意的不可变类型,比如浮点型(实型),字符串
或者元组。
自动添加:即使键起初在字典中并不存在,也可以为它赋值,这样字典就会建立新的项。而list不能直接关联到列表范围之外的索引上。
成员资格:表达式k in d(d为字典)查找的是键,而不是值。表达式v in l(l为列表)则用来查找值,而不是索引。
字典格式化字符串
使用字典格式化字符串(只以字符串作为键的)而不是元组
phonebook = {'Beth':'9102','Alice':'2341','Cecil','3258'}
print "Cecil's phone number is %(Cecil)s." % phonebook Cecil's phone number is 3258
字典方法
1.dict.clear()方法------用来清除字典中所有的项。这个是原地操作(类似于list.sort),没有返回值(返回值为None)
d = {}
d['name'] = 'Gumby'
d['age'] = 42
d.clear()
print d {}
注意:dict中x=y为浅复制,x.clear()会清空x与y共同所指向的原始字典
2.dict.copy()----copy方法用来返回一个具有相同键-值对的新字典(这个方法使用的是浅复制)
x = {'username':'admin','machines':''foo','bar','baz']}
y = x.copy()
y['username'] = 'mlh'
y['machines'].remove('bar')
print y {'username':'mlh','machines':['foo','baz']}
print x {'username':'admin','machines':['foo','baz']}
在副本中替换值的时候,原始字典不受到影响,但是,若修改了某个值(原地修改而不是替换),原始字典也会受到影响,可以使用
深复制解决此问题
深复制(deep copy),复制其包含的所有值。copy中的deepcopy可以解决这个问题。
示例
from copy import deepcopy
d = {}
d['names'] = ['Alfred','Bertrand']
c = d.copy()
dc = deepcopy(d)
d['names'].append('Clive')
print c {'names':['Alfred','Bertrand','Clive']}
print dc {'names':['Alfred','Bertrand']}
3.dict.fromkeys(sequence[,str])---------使用给定的方法建立新的字典,每个键对应一个默认的值None
print dict.fromkeys(['name','age']) {'age':None,'name':'None'}
print dict.fromkeys(['name','key'],'(unknown)') {'age':'(unknown)','name':'(unknown)'}
d = {}
d['name'] = 'Eric'
print d.get('name','N/A') 'Eric'
d = {}
d.has_key('name') False
d['name'] = 'Eric'
d.has_key('name') True
6.item和iteritem-----------------item方法将字典所有的项以列表的形式返回,列表中的每一项都为(键,值)对的形状。但是项在返回时并没有遵循特定的次序。
d = {'title':‘Python Web Site’,'url':'Http://python.org','spam':0}
print d.item() [('title',‘Python Web Site’),('url','Http://python.org'),('spam',0)]
it = d.iteritem()
print it [('title',‘Python Web Site’),('url','Http://python.org'),('spam',0)]
7.dict.keys()和dict.iterkeys()----------------keys将字典中的键以列表的形式返回,dict.iterkeys()返回针对键的迭代器
8.dict.pop(key)------------------------pop方法用来获得对应给定键的值,然后将这个键-值从字典中移除
d = {'x':1,'y':2}
print d.pop('x') 1
print d {'y':2}
9.dict.popitem()-------------------popitem弹出字典中随机的项,返回的数据以元组形式返回
d = {'url':'http://www.python.org','spam':0,'title':'Python Web Site'}
print d.popitem() ('url','http://www.python.org')
print d {'spam':0,'title':'Python Web Site'}
10.dict.setdefault(key,str)-----------------------setdefault方法某种程度上类似于get方法,setdefault还能在字典中不含有给定键的情况下设定相应的键值,如果不设定,会默认使用None
当键不存在的时候,setdefault返回默认值并相应的更新字典。如果键存在,那么就返回与其对应的值,但不改变字典。
d = {}
d.setdefault('name','N/A')
print d {'name':'N/A'}
d['name'] = 'Gumby'
print d.setdefault('name','N/A') 'Gumby'
print d {'name':'Gumby'}
11.dict.update(dict)
update方法可以利用一个字典更新另外一个字典
d = {
'title':'Python Web Site'
'url':'http://www.python.org’
'changed':'Mar 14 22:09:15 MET 2008'
}
x = {'title':'Python Language Website'}
d.update(x)
print d {'url':'http://www.python.org','changed':'Mar 14 22:09:15 MET 2008','title':'Python language Website'}
12.dict.keys()和dict.iterkeys()以列表的形式返回字典中的值(itervalues返回值的迭代器),与返回键的列表不同的是,返回值的列表中可以包含重复的元素
d = {}
d[1] = 1
d[2] = 2
d[3] = 3
d[4] = 1
print d.values() [1,2,3,1]