字典,這個東西你現在還用嗎?隨著網絡的發(fā)展,用的人越來越少了。不少人習慣于在網上搜索,不僅有web版,乃至于已經有手機版的各種字典了。我曾經用過一本小小的《新華字典》。
《新華字典》是中國第一部現代漢語字典。最早的名字叫《伍記小字典》,但未能編纂完成。自1953年,開始重編,其凡例完全采用《伍記小字典》。從1953年開始出版,經過反復修訂,但是以1957年商務印書館出版的《新華字典》作為第一版。原由新華辭書社編寫,1956年并入中科院語言研究所(現中國社科院語言研究所)詞典編輯室。新華字典由商務印書館出版。歷經幾代上百名專家學者10余次大規(guī)模的修訂,重印200多次。成為迄今為止世界出版史上最高發(fā)行量的字典。
這里講到字典,不是為了敘舊。而是提醒看官想想我們如何使用字典:先查索引(不管是拼音還是偏旁查字),然后通過索引找到相應內容。
這種方法能夠快捷的找到目標。
在python中,也有一種數據與此相近,不僅相近,這種數據的名稱就叫做dictionary,翻譯過來是字典,類似于前面的int/str/list,這種類型數據名稱是:dict
依據管理,要知道如何建立dict和它有關屬性方法。
因為已經有了此前的基礎,所以,學這個就可以加快了。
前面曾經建議看官一個很好的學習探究方法,比如想了解str的有關屬性方法,可以在交互模式下使用:
代碼如下:
>>>help(str)
將得到所有的有關內容。
現在換一個,使用dir,也能得到相同的結果。只是簡單一些罷了。請在交互模式下:
?12 >>> dir(dict) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
以__(雙下劃線)開頭的先不管??春竺娴?。如果要想深入了解,可以這樣:
代碼如下:
>>> help(dict.values)
然后出現:
代碼如下:
Help on method_descriptor:
values(...)
D.values() -> list of D's values
(END)
也就是在這里顯示出了values這個內置函數的使用方法。敲擊鍵盤上的q鍵退回。
概述
python中的dict具有如下特點:
dict是可變的
dict可以存儲任意數量的Python對象
dict可以存儲任何python數據類型
dict以:key:value,即“鍵:值”對的形式存儲數據,每個鍵是唯一的。
dict也被稱為關聯數組或哈希表。
以上諸條,如果還不是很理解,也沒有關系,通過下面的學習,特別是通過各種實驗,就能理解了。
創(chuàng)建dict
話說創(chuàng)建dict的方法可是遠遠多于前面的int/str/list,為什么會多呢?一般規(guī)律是復雜點的東西都會有多種渠道生成,這也是從安全便捷角度考慮吧。
方法1:
創(chuàng)建一個空的dict,這個空dict,可以在以后向里面加東西用。
代碼如下:
>>> mydict = {}
>>> mydict
{}
創(chuàng)建有內容的dict。
代碼如下:
>>> person = {"name":"qiwsir","site":"qiwsir.github.io","language":"python"}
>>> person
{'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}
"name":"qiwsir"就是一個鍵值對,前面的name叫做鍵(key),后面的qiwsir是前面的鍵所對應的值(value)。在一個dict中,鍵是唯一的,不能重復;值則是對應于鍵,值可以重復。鍵值之間用(:)英文的分號,每一對鍵值之間用英文的逗號(,)隔開。
代碼如下:
>>> person['name2']="qiwsir" #這是一種向dict中增加鍵值對的方法
>>> person
{'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}
如下,演示了從一個空的dict開始增加內容的過程:
?12345678910111213 >>> mydict = {} >>> mydict {} >>> mydict["site"] = "qiwsir.github.io">>> mydict[1] = 80>>> mydict[2] = "python">>> mydict["name"] = ["zhangsan","lisi","wangwu"] >>> mydict {1: 80, 2: 'python', 'site': 'qiwsir.github.io', 'name': ['zhangsan', 'lisi', 'wangwu']} >>> mydict[1] = 90 #如果這樣,則是修改這個鍵的值 >>> mydict {1: 90, 2: 'python', 'site': 'qiwsir.github.io', 'name': ['zhangsan', 'lisi', 'wangwu']}
方法2:
?1234 >>> name = (["first","Google"],["second","Yahoo"]) #這是另外一種數據類型,稱之為元組,后面會講到 >>> website = dict(name) >>> website {'second': 'Yahoo', 'first': 'Google'}
方法3:
這個方法,跟上面的不同在于使用fromkeys
?123 >>> website = {}.fromkeys(("third","forth"),"facebook") >>> website {'forth': 'facebook', 'third': 'facebook'}
需要提醒的是,這種方法是從新建立一個dict。
訪問dict的值
因為dict是以鍵值對的形式存儲數據的,所以,只要知道鍵,就能得到值。這本質上就是一種映射關系。
?123456789 >>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'} >>> person['name'] 'qiwsir'>>> person['language'] 'python'>>> site = person['site'] >>> print site qiwsir.github.io
如同前面所講,通過鍵能夠增加dict中的值,通過鍵能夠改變dict中的值,通過鍵也能夠訪問dict中的值。
看官可以跟list對比一下。如果我們訪問list中的元素,可以通過索引值得到(list[i]),如果是讓機器來巡回訪問,就可以用for語句。復習一下:
?1234567 >>> person_list = ["qiwsir","Newton","Boolean"] >>> for name in person_list: ... print name ... qiwsir Newton Boolean
那么,dict是不是也可以用for語句來循環(huán)訪問呢?當然可以,來看例子:
?123456789 >>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'} >>> for key in person: ... print person[key] ... qiwsir qiwsir python qiwsir.github.io
更多信息請查看IT技術專欄