Python学习笔记(四) 字典: 当索引不好用时

来源:互联网 发布:2017淘宝美国章鱼哥 编辑:程序博客网 时间:2024/05/01 23:53

          字典是一种通过名字引用知的数据结构,这种结构类型成为映射(mapping) , 字典是Python中唯一的内建映射类型.  字典中得知并没有特殊的顺序,但是都存储在一个特定的键(key)里, 建可以是数字,字符串甚至是元组.


4.1 字典的使用 


      类似于C++ 中的map.


4.2 创建和使用字典


      字典可以通过下面的方式创建

:

       

>>> phonebook = {'Alice':'2341','Beth':'9102','Cecil':'3258'}

4,2,1 dict 函数

         可以同dict函数,通过其他映射(比如其他字典) 或者(键,值)这样的序列对建立字典

         

>>> items=[('name','gumby'),('age',42)]>>> d = dict (items)>>> d{'age': 42, 'name': 'gumby'}

dict函数也可以通过关键字参数来创建字典

>>> d = dict(name = 'gumby',age=42)>>> d{'age': 42, 'name': 'gumby'}

4.2.2 字典的基本操作

         字典的基本操作在很多方面与序列(sequence)类似:

                  len(d)  返回d中项(键-值对)的数量

                 d[k]   返回关联到键k上的值

                  d[k]=v  将值v关联到键k上

                  del[k]    删除键为k的项

                  k in d 检查的中是否含有键为k的项 .


          尽管字典和列表页有很多特性相同,但也有下面以下重要区别

         键类型:  不一定整数, 浮点型,字符串,元组都有可能

         自动添加:  即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立一个新的项 (所以说 Python 中的字典基本就是C++ 中的map)

         成员资格  :  key in d  查找的是键,而不是值. 


         字典示例 :  用字典嵌套字典建立简单数据库:

         

>>> family= {'Liang' :{'phone' : '150','add': 'fushun'},'Xu':{'phone' : ' 139','add' : 'huludao'}}
         查询: family['Liang']['add']

4.2.3 字典的格式化字符串

>>> phonebook{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}>>> "Cecil's phone number is %(Cecil)s."%phonebook"Cecil's phone number is 3258."

4.2.4字典方法

         1 clear() 

            清空字典中的所有元素

          2 copy

            返回具有相同键-值对的新字典

           

>>> phonebook{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}>>> y=phonebook.copy()>>> y{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
       此处为浅复制, 当原始字典修改值(不是替换)时,副本也受影响 . 未解决这个问题,可以使用深复制: deepcopy

   

>>> e={}>>> e{}>>> e['name']=['a','b']>>> e{'name': ['a', 'b']}>>> c=e.copy()>>> dc=deepcopy(e)>>> e['name'].append('c')>>> c{'name': ['a', 'b', 'c']}>>> dc{'name': ['a', 'b']}>>> e{'name': ['a', 'b', 'c']}

3 fromkeys

   使用给定的键家里新的字典, 每个键对应的值为None .

  

>>> dict.fromkeys(['name','age']){'age': None, 'name': None}
 

          也可以使用自己的默认值

    

dict.fromkeys(['name','age'],'(unknow)'){'age': '(unknow)', 'name': '(unknow)'}
4 get

     是一种更宽松的访问字典的方法, 此种方法访问字典中不存在的的项时不会出错

    

>>> d={}>>> print d['name']Traceback (most recent call last):  File "<pyshell#135>", line 1, in <module>    print d['name']KeyError: 'name'>>> print d.get('name')None

    这里也可以返回默认值

     

 

>>> print d.get('name','N/A')N/A


5 has_key

   检查字典中是否含有给出的键


  

>>> d.has_key('name')False

6 items和iteritems

  

items 将字典所有项以列表方式返回

>>> x{'Beth': '9101', 'Alice': '2341', 'Cecil': '3258'}>>> x.items()[('Beth', '9101'), ('Alice', '2341'), ('Cecil', '3258')]

 iteritems 返回一个迭代器 (具体参照Python学习笔记(九))


7 keys和 iterkeys

  keys将所有字典中的键以列表方式返回, iterkeys返回迭代器


8pop

  pop 用来获得应用于给定键的值,然后将这个键-值从字典中删除

 

>>> x{'Beth': '9101', 'Alice': '2341', 'Cecil': '3258'}>>> x.items()[('Beth', '9101'), ('Alice', '2341'), ('Cecil', '3258')]>>> x.pop('Beth')'9101'

9 popitem

   弹出随机的项.  字典中不存在有关顺序的概念(与map不同) ,若想一个接一个的移除并处理项,这个方法将非常有用.

   

>>> y{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}>>> y.popitem()('Beth', '9102')>>> y{'Alice': '2341', 'Cecil': '3258'}

10 setdefault  

    某种程度上类似于get, 就是能够获得与给定键相关联的值, 除此之外,还能在字典不含相应键值的情况下设置相应键值

>>> y.setdefault('L','N/A')'N/A'

11 update

 

    update可以用一个字典更新另一个字典

    

>>> x{'Alice': '2341', 'Cecil': '3258'}>>> y{'Alice': '2341', 'L': 'N/A', 'Cecil': '3258'}>>> x.update(y)>>> x{'Alice': '2341', 'L': 'N/A', 'Cecil': '3258'}
12 values 和itervalues


      values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)

  

>>> y{'Alice': '2341', 'L': 'N/A', 'Cecil': '3258'}>>> y.values()['2341', 'N/A', '3258']

  

  


2 0
原创粉丝点击