dicti型別在各種程式中得到廣泛應用,模組的命名空間、例項的屬性和函式的關鍵字引數中都可以看到欄位的身影。跟它有關的內建函式都在__builtins__.__dict__模組中。
python對dict的實現做了高度優化,而雜湊表是字典型別效能出眾的根本原因。集合(set)的實現其實也依賴於雜湊表。想要進一步理解集合和字典,就得先理解雜湊表的原理。
3.1 泛對映型別
3.2 字典推導
#字典推導應用
>>> dial_codes = [
(91, 'india'),
(1, 'united states'),
(62, 'indonesia'),
(7, 'russia'),
(81, 'japan'),
]>>> country_code =
>>> country_code
>>>
3.3 常見的對映方法
常見的對映方法,這裡就不一一列出。
用setdefault處理找不到的鍵
3.4 對映的彈性鍵查詢
如果某個鍵在對映裡不存在,可以通過以下兩種方式通過這個鍵讀取得到乙個預設值。
3.5 欄位的變種
省略3.6 子類化userdict
省略3.7 不可變對映型別
省略3.8 集合論
集合的本質是許多唯一物件的聚集。因此,可以去重。它的特點就是以空間換時間,耗記憶體,易查詢,使用頻率低。這些特點歸功於它背後的雜湊表。
>>> l = ['spam','spam','eggs','spam']
>>> l
['spam', 'spam', 'eggs', 'spam']
>>> set(l)
>>> list(set(l))
['spam', 'eggs']
注意:如果要建立乙個空集,需使用不帶引數的set()方法。如果只是寫成{}的形式,那建立的是個空字典。
集合推導
>>> from unicodedata import name>>>
集合的操作:
(1)數**算
python
方法
描述
s & z
s.__and__(z)
s和z的交集
s | z
s.__or__(z)
s和z的並集
s - z
s.__sub__(z)
s和z的差集
s ^ z
s.__xor__(z)
s和z的對稱差集
(2)比較運算
python運算子
方法
描述
e in s
s.__contains__(e)
元素e是否屬於s
s <= z
s.__le__(z)
s是否為z的子集
s < z
s.__lt__(z)
s是否為z的真子集
s >= z
s.__ge__(z)
s是否為z的父集
s > z
s.__gt__(z)
s是否為z的真父集
(3)其他方法
方法
set
frozenset
描述
s.add(e)
*
把元素e新增到s中
s.clear()
*
移除掉s中的所有元素
s.copy()
*
*
對s淺複製
s.discard(e)
*
如果s裡有e這個元素的話,把它移除
s.__iter__()
*
*
返回s的迭代器
s.__len__()
*
*
len(s)
s.pop()
*
從s中移除乙個元素並返回它的值,若s為空,則丟擲keyerror異常
s.remove(e)
*
從s中移除e元素,若e元素不存在,則丟擲keyerror異常
3.9 dict和set的背後
python用雜湊表實現dict和set的,具體如何實現這裡就不一一展開。
特點:
3.10 本章小結
第7章 映像和集合型別 3
7.6 集合型別 集合物件是一組無序排列的可雜湊的值。集合成員可以做字典中的鍵。集合支援in和not in操作符檢查成員,由len 內建函式得到集合的基數,用for迴圈迭代集合的成員。但因為集合本身是無序的,所以不可以為集合建立索引或執行切片操作,也沒有鍵可用來獲取集合中元素的值。集合有兩種不同的型...
字典和集合
字典 dict 字典 dict是一種無序的可變容器,序列的索引對它失效,它的索引是自定義的 形式 d d d dict a 1,b 2 d dict name libai age 30 d dict.fromkeys 迭代物件 將乙個迭代物件的每個元素作為鍵,值預設全部為none 字典方法 例 d ...
集合和字典
二 字典 dictionary 定義 1.建立格式 par 或者set value 向集合中新增元素 s.add a a 如果a已經存在,不進行任何操作 或者s.update a a可以是列表,元組,字典等。a 可以是多個,用逗號隔開。2.移除元素 s.remove a 將a從集合中移除出去,如果元...