python 字典

字典dict,是Python惟一的標準mapping類型,也是內置在Python解釋器中的。python

mapping object把一個可哈希的值(hashable value)映射到一個任意的object上。app

什麼是可哈希的函數

一個object是可哈希的(hashable), 是指這個object在其生存期內有一個不變的哈希值(hash value),即__hash__()方法返回的值。ui

全部不可變的(immutable)內置object都是hashable的,好比string,tuple。全部可變的(mutable)內置容器都不是hashable的,好比list,dict(即沒有__hash__()方法)。而全部自定義的類(use-defined class)對象都是可哈希的(hashable),而且只能和本身相等,其hashvalue爲其id(object)的值,這裏的id()爲內置函數,CPython實現的時候取的對象在內存中的地址。spa

字典Dictionary的key必須是可哈希的,因此tuple,string能夠作key,而list不能作key,關於這個我之後會專門解釋,或參見文末參考第3篇。命令行

dict自己是一個類code

class dict(mapping)對象

1,字典的建立blog

1
2
3
4
5
6
>>> d  =  dict ({ 1 : 'a' 2 : 'b' 3 : 'c' })       #經過dict類來構建
>>> d
{ 1 'a' 2 'b' 3 'c' }
>>> d2  =  { 1 : 'a' 2 : 'b' 3 : 'c' }           #直接構建,注意語法,大括號,冒號,逗號
>>> d2
{ 1 'a' 2 'b' 3 'c' }

 

2,dictionary支持的操做內存

做爲Python惟一的標準mapping type,dictionary支持了增,刪,查,總體更新等操做。

一部分操做是由dict的成員函數實現的,一部分操做是由Python的內置函數(built-in)function實現的,也有使用Python的del語句

 2.1 引用元素

直接用d[key],就能夠獲得key所對應得那個object,可是若是key不存在呢,若是使用的就是標準的dict,那麼會拋出KeyError異常。可是若是咱們是本身從dict派生了一個本身的dictionary,那麼只要咱們定義__missing__函數,當key不存在時,這個函數會以key作爲參數被調用,咱們試驗一下。

寫一個module  ,mdict.py

1 class myDict(dict):
2         def __missing__(self, key):
3                 print "__missing__ called , key = ", key
4 return "^_^"

而後打開Python命令行解釋器,import mdict

 
>>> from mdict import myDict
>>> d = myDict({1:'a', 2:'b', 3:'c'})
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> d[1]
'a'
>>> d[4]
__missing__ called , key =  4
^_^

能夠看到__missing__()被調用了。

若是隻想獲得某個key對應的value,不想對其進行改變,則用對象方法get() ,這相似C++中「引用」和「值」的概念。

>>> a = d.get(1)
>>> a
'a'

 

2.2  類方法實現的操做

>>>d.clear()     #清空

>>>d.copy()     #拷貝生成另外一個,淺拷貝(shallow copy)

d.keys(),d.values(),d.items()

這三個都會生成dictionary相應的keys,values,items的copy,返回結果都是list,d.items()生成的是(key,value)二元tuple的list

 
>>> d.items()
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> d.keys()
[1, 2, 3]
>>> d.values()
['a', 'b', 'c']
 

d.viewkeys(),d.viewvalues(),d.viewitems()

這三個都會生成dictionary相應的view object,view object是dictionary中(key,value)的動態反映,當dictionary中的內容變化時,view object也會變。

 
>>> viewkeys = d.viewkeys()
>>> viewkeys
dict_keys([1, 2, 3])
>>> list(viewkeys)
[1, 2, 3]
>>> del d[1]
>>> list(viewkeys)
[2, 3]
 

 

2.3 內置函數實現的操做

>>>len(d)    #dictionary的長度

>>>del d[key]  或  del  d      #del語句

>>>key in d 或 key not in d     #返回True or False 

 

 

3, 字典的bool判斷

Python的對象均可以直接用來判斷其bool值,對內置的字典來講,當其爲空時爲False,不爲空時True

>>> d = {}
>>> bool(d)
False
相關文章
相關標籤/搜索