第七节课:字典
字典是无序的,它不能通过偏移量来索引,只能通过键来存取. 
字典= {'key':value} key:类似我们现实的钥匙,而value则是锁。一个钥匙开一个锁. 
特点:
内部没有顺序,通过键来读取内容,可嵌套,方便我们组织多种数据结构,并且原地修改里面的内容,属于可变类型. 
组成字典的键必须是不可变的数据类型,比如 数字、字符串,元组等. 列表是可变对象不能作为键. 
键是字符串:info = {'a':1,'b':2}
键是数字:  info2 = {1:'a',2:'b'}
键是元组:  cinfo = {(1,2,3):'aaa',(3,4):'bbb'}
键是元组:dinfo = {(2,[2,3]):'a',(3,4):'b'}    且元组中含可变对象,会报错 
1. 创建字典: {} dict()
ainfo = {'name':'lilei', 'age':20}
binfo = dict(name = 'liming', age = 22)
2. 添加内容:a['xx'] = 'xx'
binfo['phone'] = 'iphone5s' 不存在键,添加
3. 修改内容:a['xx'] = 'yy'
binfo['phone'] = 'htc'   已经存在键,则修改。 
update 参数是一个字典类型,他会覆盖相同键的值 
ainfo.update({'city':'beojing','phone':'nokia'})  
ainfo.update({'city':'beojing','phone':'htc'})
4. 删除  del clear pop 
del ainfo['city']
del ainfo 删除 ainfo 对数据的引用,ainfo不存在了
binfo.clear() 删除字段的全部元素,为空字段, binfo才是存在的 
pop方法:返回键值对应的值,并且删除原字典中的键和值
>>> a = dict(name = 'liming', age = 22)
>>> a.pop('name')
'liming'
对比 列表的pop方法:通过下标索引,反馈下标对应的值,并从列表中删除下标对应的值 
>>> binfo = [] >>> binfo.append('a') >>> binfo.append('b') >>> binfo.append('c') >>> binfo ['a', 'b', 'c'] >>> binfo.pop(0) 'a' >>> binfo ['b', 'c']
相同点是删除反馈值并删除对应的值,不同点是字段的pop方法在异常的时候可以返回你想要的值 
>>> a = [1,2,3] >>> a.pop(4) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: pop index out of range >>> b = {'a':1,'b':2} >>> b.pop('c') Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'c' >>> b.pop('c','meiyouzhi') 'meiyouzhi' >>> b {'a': 1, 'b': 2}
5. in 和 has_key() 成员关系操作  
   5.1 phone in info 
   5.2 info.has_key('phone')
>>> a = {'a':1,'b':2}
>>> a
{'a': 1, 'b': 2}
>>> 'a' in a
True
>>> 'c' in a
False
>>> a.has_key('aa')
False
>>> a.has_key('a')
True
6. keys(): 返回的是列表, 里面包含了字段的 所有键
   values():返回的是列表, 里面包含了字段的 所有值
   items: 生成一个字段的容器 :[()]
>>> ainfo = {'name':'lilei', 'age':20}
>>> ainfo.keys()
['age', 'name']
>>> ainfo.values()
[20, 'lilei']
>>> ainfo.items()
[('age', 20), ('name', 'lilei')]
>>> type(ainfo.items())
<type 'list'>
>>> type(ainfo.items()[0])
<type 'tuple'>
>>> ainfo.items()[1]
('name', 'lilei')
   
7. get 取字段的值
直接根据键取值,无法取到的时候会报错
>>> ainfo = {'name':'lilei', 'age':20}
>>> ainfo['name']
'lilei'
>>> ainfo['names']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'names'
用get方法取值,如果键不存在,返回一个NoneType类型的值,可以设定返回的默认值. 
>>> ainfo {'age': 20, 'name': 'lilei'} >>> ainfo.get('name') 'lilei' >>> ainfo.get(name) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'name' is not defined >>> ainfo.get('names') >>> type(ainfo.get('names')) <type 'NoneType'> >>> ainfo.get('names','none') 'none'
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号