一.映射与字典

映射:一种通过名字来引用值的数据结构。字典是Python中唯一内建的映射类型。

字典是另一种可变容器模型,且可存储任意类型对象。字典中的值没有特殊的顺序,但是都存储在一个特定的键(Key)下,其中键可以是数字,字符串或元组。

 

二,字典的创建

字典由多个键和对应的值构成的-组成。

Eg. haoma={'ming':'001','hong':'002','xin':'003','qing':'004'}1.dict函数:通过其他映射或对的序列建立字典
eg.items=[('name','ming'),('age',20)]

d=dict(items)

print d2.基本字典操作(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的项。注:键可以是任意不可变类型3.字典的格式化字符串(略)4.字典方法:(1)clear;(2)copy;(3)fromkeys;(4)get;(5)has_key;(6)items和iteritems;(7)keys和iterkeys;(8)pop;(9)popitem;(10)setdefault(11)update;(12)values和itervalues相关代码:# -*- coding: utf-8 -*-

names=['ming','hong','xin','qing']  #人名
numbers=['001','002','003','004']   #对应的号码
print numbers[names.index('hong')]    #查找某人的号码 002

#创建字典
haoma={'ming':'001','hong':'002','xin':'003','qing':'004'}
print haoma

#dict函数:通过其他映射或对的序列建立字典
items=[('name','ming'),('age',20)]
d=dict(items)
print d

c=dict(name='ming',age=20)
print c

#基本字典操作
print len(d)   #2 :返回d中键-值的数量
print d['age']   #20:返回关联到键k上的值
d['age']=21
print d         #{'age': 21, 'name': 'ming'} :将值v关联到键k上
del d['age']
print d         #{'name': 'ming'}: 删除键值为k的项
print 'age' in d   #False: 检查d中是否含所有键为k的项

#字典方法
#1.clear 清除字典中所有的项
x={}
y=x
x['name']='ming'
x['age']='21'
print x  #{'age': '21', 'name': 'ming'}
x={}      #x关联到新的空字典,对y无影响
print x  #{}
print y   #{'age': '21', 'name': 'ming'}


x={}
y=x  #x,y对应同一个字典
x['name']='ming'
x['age']='21'
print x  #{'age': '21', 'name': 'ming'}
x.clear()    #clear清空原始字典
print x   #{}
print y   #{}


#2.copy 返回一个具有相同键-值对的新字典
#shallow copy浅复制
x={'ming':'001','hong':['002','003']}
print x    #{'hong': ['002', '003'], 'ming': '001'}
y=x.copy()
y['ming']='004'
y['hong'].remove('003')
print y    #{'hong': ['002'], 'ming': '004'}
print x    #{'hong': ['002'], 'ming': '001'}  #在副本替换值时,原始字典不受影响;但是修改就会影响原始字典

#deep copy 深复制  避免以上问题
from copy import deepcopy
x={}
x['name']=['ming','hong']
y=x.copy()
z=deepcopy(y)
x['name'].append('qing')
print y    #{'name': ['ming', 'hong', 'qing']}
print z    #{'name': ['ming', 'hong']

#3.fromkeys 使用给定的键建立新的字典,每个键都对应一个默认的值 None
print {}.fromkeys(['name','age'])   #{'age': None, 'name': None}
print dict.fromkeys(['name','age'],'(unkown)')  #{'age': '(unkown)', 'name': '(unkown)'}

#4.get 访问字典项
x['name']=['ming','hong']
print x.get('name')      #['ming', 'hong']  等于print x['name']
print x.get('age')       #None      print x['age']会出错

#5 has_key 检查字典中是否还有特定的键
x['name']=['ming','hong']
print x.has_key('name')   #True
print x.has_key('age')    #False

#6.items:将字典所以的项以列表的方式返回 iteritems:返回一个迭代器对象
x={'ming':'001','hong':'002'}
print x           #{'hong': '002', 'ming': '001'}
print x.items()   #[('hong', '002'), ('ming', '001')]
print x.iteritems()   #<dictionary-itemiterator object at 0x0000000003B649A8> 以迭代器对象返回
print list(x.iteritems())  #[('hong', '002'), ('ming', '001')]

#7.keys:将字典中的键以列表的形式返回; iterkeys:返回针对键的迭代器
x={'ming':'001','hong':'002'}
print x.keys()   #['hong', 'ming']['hong', 'ming']
print x.iterkeys()  #<dictionary-keyiterator object at 0x0000000003B64BD8>
print list(x.iterkeys())  #['hong', 'ming']

#8.pop 获取对应于给定键的值,然后将这个键-值从字典中去除
x={'ming':'001','hong':'002'}
print x.pop('ming')   #001
print x               #{'hong': '002'}

#9.popitem  弹出随机的项(因为字典是无序的)
x={'ming':'001','hong':'002','xin':'003','qing':'004'}
print x.popitem()   #('hong', '002')
print x           #{'qing': '004', 'xin': '003', 'ming': '001'}
print x.popitem()   #('qing', '004')
print x.popitem()    #('xin', '003')
print x          # {'ming': '001'}  可以用于一个接一个地移除并处理项

#10.setdefault :与get类似,能够获得与给定键相关联的值。此外,还没在字典中不含给定键的情况下设定键值
x={}
print x.setdefault('name')  #None
print x                      #{'name': None}

#11.updata 利用一个字典更新另外一个字典
x={'ming':'001','hong':'002'}
y={'qing':'003'}
x.update(y)
print x   #{'hong': '002', 'qing': '003', 'ming': '001'}


#12.values  返回字典中的值;itervalues返回值的迭代器
x={'ming':'001','hong':'002'}
print x.values()      #['002', '001']
print x.itervalues()   #<dictionary-valueiterator object at 0x0000000003B64F48>
print list(x.itervalues())  #['002', '001']
# -*- coding: utf-8 -*-

names=['ming','hong','xin','qing']  #人名
numbers=['001','002','003','004']   #对应的号码
print numbers[names.index('hong')]    #查找某人的号码 002

#创建字典
haoma={'ming':'001','hong':'002','xin':'003','qing':'004'}
print haoma

#dict函数:通过其他映射或对的序列建立字典
items=[('name','ming'),('age',20)]
d=dict(items)
print d

c=dict(name='ming',age=20)
print c

#基本字典操作
print len(d)   #2 :返回d中键-值的数量
print d['age']   #20:返回关联到键k上的值
d['age']=21
print d         #{'age': 21, 'name': 'ming'} :将值v关联到键k上
del d['age']
print d         #{'name': 'ming'}: 删除键值为k的项
print 'age' in d   #False: 检查d中是否含所有键为k的项

#字典方法
#1.clear 清除字典中所有的项
x={}
y=x
x['name']='ming'
x['age']='21'
print x  #{'age': '21', 'name': 'ming'}
x={}      #x关联到新的空字典,对y无影响
print x  #{}
print y   #{'age': '21', 'name': 'ming'}


x={}
y=x  #x,y对应同一个字典
x['name']='ming'
x['age']='21'
print x  #{'age': '21', 'name': 'ming'}
x.clear()    #clear清空原始字典
print x   #{}
print y   #{}


#2.copy 返回一个具有相同键-值对的新字典
#shallow copy浅复制
x={'ming':'001','hong':['002','003']}
print x    #{'hong': ['002', '003'], 'ming': '001'}
y=x.copy()
y['ming']='004'
y['hong'].remove('003')
print y    #{'hong': ['002'], 'ming': '004'}
print x    #{'hong': ['002'], 'ming': '001'}  #在副本替换值时,原始字典不受影响;但是修改就会影响原始字典

#deep copy 深复制  避免以上问题
from copy import deepcopy
x={}
x['name']=['ming','hong']
y=x.copy()
z=deepcopy(y)
x['name'].append('qing')
print y    #{'name': ['ming', 'hong', 'qing']}
print z    #{'name': ['ming', 'hong']

#3.fromkeys 使用给定的键建立新的字典,每个键都对应一个默认的值 None
print {}.fromkeys(['name','age'])   #{'age': None, 'name': None}
print dict.fromkeys(['name','age'],'(unkown)')  #{'age': '(unkown)', 'name': '(unkown)'}

#4.get 访问字典项
x['name']=['ming','hong']
print x.get('name')      #['ming', 'hong']  等于print x['name']
print x.get('age')       #None      print x['age']会出错

#5 has_key 检查字典中是否还有特定的键
x['name']=['ming','hong']
print x.has_key('name')   #True
print x.has_key('age')    #False

#6.items:将字典所以的项以列表的方式返回 iteritems:返回一个迭代器对象
x={'ming':'001','hong':'002'}
print x           #{'hong': '002', 'ming': '001'}
print x.items()   #[('hong', '002'), ('ming', '001')]
print x.iteritems()   #<dictionary-itemiterator object at 0x0000000003B649A8> 以迭代器对象返回
print list(x.iteritems())  #[('hong', '002'), ('ming', '001')]

#7.keys:将字典中的键以列表的形式返回; iterkeys:返回针对键的迭代器
x={'ming':'001','hong':'002'}
print x.keys()   #['hong', 'ming']['hong', 'ming']
print x.iterkeys()  #<dictionary-keyiterator object at 0x0000000003B64BD8>
print list(x.iterkeys())  #['hong', 'ming']

#8.pop 获取对应于给定键的值,然后将这个键-值从字典中去除
x={'ming':'001','hong':'002'}
print x.pop('ming')   #001
print x               #{'hong': '002'}

#9.popitem  弹出随机的项(因为字典是无序的)
x={'ming':'001','hong':'002','xin':'003','qing':'004'}
print x.popitem()   #('hong', '002')
print x           #{'qing': '004', 'xin': '003', 'ming': '001'}
print x.popitem()   #('qing', '004')
print x.popitem()    #('xin', '003')
print x          # {'ming': '001'}  可以用于一个接一个地移除并处理项

#10.setdefault :与get类似,能够获得与给定键相关联的值。此外,还没在字典中不含给定键的情况下设定键值
x={}
print x.setdefault('name')  #None
print x                      #{'name': None}

#11.updata 利用一个字典更新另外一个字典
x={'ming':'001','hong':'002'}
y={'qing':'003'}
x.update(y)
print x   #{'hong': '002', 'qing': '003', 'ming': '001'}


#12.values  返回字典中的值;itervalues返回值的迭代器
x={'ming':'001','hong':'002'}
print x.values()      #['002', '001']
print x.itervalues()   #<dictionary-valueiterator object at 0x0000000003B64F48>
print list(x.itervalues())  #['002', '001']