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

          字典是一种通过名字引用知的数据结构,这种结构类型成为映射(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 "", line 1, in 
    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']

  

  


你可能感兴趣的:(Python学习笔记)