7.1 對映型別:字典
字典是python語言中唯一的對映型別。
乙個字典物件是可變的,它是乙個容器型別,能儲存任意個數的python物件,其中也包括其他容器型別。
字典型別和序列型別容器類的區別是儲存和訪問資料的方式不同。序列型別只用數字型別的鍵。對映型別也可以用其他物件型別做鍵,一般常見的是用字串做鍵。和序列型別的鍵不同,映像型別的鍵直接或間接地和儲存的資料值相關聯。
映像型別中的資料是無序排列的。
對映型別通常被稱做雜湊表,是因為字典物件就是雜湊型別的。
你所能獲得的有序集合只能是字典中的鍵的集合或值的集合。方法keys()或values()返回乙個列表,該列表是可排序的。你還可以用items()方法得到包含鍵、值對的元組的列表來排序。由於字典本身是雜湊的,所以是無序的。
多條字典條目被包含在大括號({})裡。
7.1.1 如何建立字典和給字典賦值
可以用工廠方法dict()來建立字典,也可以用乙個很方便的內建方法fromkeys()來建立乙個"預設"字典。
>>> dict1 = dict((("1th", "runrun"),("2th", "jing"), ("3th", "qing")))
>>> dict1["1th"]
'runrun'
>>> dict2 = {}.fromkeys(("address", "hometown"),"yantai")
>>> dict2["address"]
'yantai'
>>>
7.1.2 如何訪問字典中的值
可以用keys()方法獲取供迴圈使用的鍵值列表,也可以用迭代器來輕鬆訪問類序列物件,比如字典和檔案。
>>> for key in dict1.keys():
... print key, dict1[key]
...
3th qing
2th jing
1th runrun
>>> for key in dict2:
... print key, dict2[key]
...
hometown yantai
address yantai
>>>
檢查乙個字典中是否用某個鍵的最好方法是用字典的has_key()方法,或者另一種比較好的方法in或not in操作符。
在執行中字典中的鍵不允許被改變,字典中的鍵必須是可雜湊的,所以數字和字串和以作為字典中的鍵,但是列表和其他字典不行。
>>> dict1.has_key("4th")
false
>>> "address" in dict2
true
>>>
7.1.3 如何更新字典
幾種方式對乙個字典做修改:1)新增乙個新資料項或新元素, 2)修改乙個已存在的資料項, 3)刪除乙個已存在的資料項。
>>> print "1th:%(1th)s 2th:%(2th)s 3th:%(3th)s"%dict1
1th:runrun 2th:jing 3th:qing
>>>
如果字典中該鍵已經存在,則字典中該鍵對應的值將被新值替代,上面的print語句展示了另一種在字典中使用字串格式符(%)的方法。也可以用內建方法update()將整個字典的內容新增到另乙個字典。
7.1.4 如何刪除字典元素和字典
del語句
>>> del dict2["hometown"]
>>> dict2
>>> del dict1
>>> dict1
traceback (most recent call last):
file "", line 1, in
nameerror: name 'dict1' is not defined
>>>
7.2 對映型別操作符
字典不支援像拼接和重複這樣的操作。
7.2.1 標準型別操作符
與列表,元組類似
7.2.2 對映型別操作符
1. 字典的鍵查詢操作符()
鍵查詢操作符既可以用於給字典賦值,也可以用於從字典中取值。
2. 鍵成員關係操作(in、not in)
用in和not in操作符來檢查某個鍵是否存在於字典中。
7.3 對映型別的內建函式和工廠函式
7.3.1 標準型別函式[type()、str()和cmp()]
字典通過這樣的演算法來比較的:首先是字典的大小,然後是鍵,最後是值。
第7章 映像和集合型別 3
7.6 集合型別 集合物件是一組無序排列的可雜湊的值。集合成員可以做字典中的鍵。集合支援in和not in操作符檢查成員,由len 內建函式得到集合的基數,用for迴圈迭代集合的成員。但因為集合本身是無序的,所以不可以為集合建立索引或執行切片操作,也沒有鍵可用來獲取集合中元素的值。集合有兩種不同的型...
Python核心程式設計 映像和集合型別
對映型別物件裡雜湊值 鍵,key 和指向的物件 值,value 是一對多的關係。dict1 dict1 dict2 dict1,dict2 fdict dict x 1 y 2 traceback most recent call last file line 1,in typeerror dict...
第3章 字典和集合
dicti型別在各種程式中得到廣泛應用,模組的命名空間 例項的屬性和函式的關鍵字引數中都可以看到欄位的身影。跟它有關的內建函式都在 builtins dict 模組中。python對dict的實現做了高度優化,而雜湊表是字典型別效能出眾的根本原因。集合 set 的實現其實也依賴於雜湊表。想要進一步理...