python2 x學習筆記 8 對映和集合型別

2021-08-30 12:32:07 字數 3731 閱讀 9620

[size=medium]1. 字典是 python 語言中唯一的對映型別。對映型別物件裡雜湊值(鍵) 和指向的物件(值)是一對一的關係.

2. 乙個字典物件是可變的,它是乙個容器型別,能儲存任意個數的 python 物件,其中也包括其他容器型別。字典型別和序列型別容器類(列表、元組)的區別是儲存和訪問資料的方式不同。

3. 你所能獲得的有序集合只能是字典中的鍵的集合或者值的集合。

方法 keys() 或 values() 返回乙個列表,該列表是可排序的。

你還可以用 items()方法得到包含鍵、值對的元組的列表來排序。

由於字典本身是雜湊的,所以是無序的。

4. 建立字典和給字典賦值

>>> dict1 = {}

>>> dict2 =

>>> dict1, dict2

({}, )

>> fdict = dict((['x', 1], ['y', 2]))

>>> fdict

>>> fdict = dict((['x', 1], ['y', 2]))

>>> fdict

>>> ddict = {}.fromkeys(('x', 'y'), -1)

>>> ddict

5. 如何訪問字典中的值

>>> dict2 =

>>>> for key in dict2.keys():

... print 'key=%s, value=%s' % (key, dict2[key])

從 python 2.2 開始, 你可以不必再用 keys()方法獲取供迴圈使用的鍵值列表了。 可以

用迭代器來輕鬆地訪問類序列物件(sequence-like objects),比如字典和檔案。

>>> for key in dict2:

... print 'key=%s, value=%s' % (key, dict2[key])

6. 如果我們想訪問該字典中的乙個資料元素,而它在這個字典中沒有對應的鍵,

將會產生乙個keyerror錯誤:

檢查乙個字典中是否有某個鍵的最好方法是用字典的 has_key()方法, 或者另一

種比較好的方法就是從 2.2 版本起用的,in 或 not in 操作符。 has_key() 方法將會在未來的python 版本中棄用,所以用 in 或 not in 是最好的方法。

>>> 'server' in dict2 # 或 dict2.has_key('server')

false

7. 字典中的鍵必須是可雜湊的, 所以數字和字串可以作為字典中的鍵, 但是列表和其他字典不行。

>>> print 'host %(name)s is running on port %(port)d' %dict2

host venus is running on port 6969

8. 避免使用內建物件名字作為變數的識別符號

請不要用 dict, list,file, bool, str, input, len 這樣的內建型別為變數命名.

9. 內建函式 hash()本身並不是為字典設計的方法,但它可以判斷某個物件是否可以做乙個字典的鍵。將乙個物件作為引數傳遞給 hash(), 會返回這個物件的雜湊值。 只有這個物件是可雜湊的,才可作為字典的鍵 (函式的返回值是整數,不產生錯誤或異常)。

如果用比較操作符來比較兩個數值,發現它們是相等的,那麼即使二者的資料型別不同, 它

們也會得到相同的雜湊值。

如果非可雜湊型別作為引數傳遞給 hash()方法,會產生 typeerror 錯誤(因此,如果使用這樣的物件作為鍵給字典賦值時會出錯):

>>> hash()

traceback (innermost last): file "", line 1, in ?

typeerror: list objects are unhashable

10. 字典型別方法

dict.clear () 刪除字典中所有元素

dict.copy () 返回字典(淺複製)的乙個副本

dict.fromkeys (seq,val=none)

建立並返回乙個新字典,以 seq 中的元素做該字典的鍵,

val 做該字典中所有鍵對應的初始值(如果不提供此值,則預設為 none)

dict.get(key,default=none)

對字典 dict 中的鍵 key,返回它對應的值 value,

如果字典中不存在此鍵,則返回 default 的值(注意,引數 default 的預設值為 none)

dict.has_key(key)

如果鍵(key)在字典中存在,返回 true,

否則返回 false. 在 python2.2版本引入 in 和 not in 後,此方法幾乎已廢棄不用了,但仍提供乙個可工作的介面。

dict.items() 返回乙個包含字典中(鍵, 值)對元組的列表

dict.keys() 返回乙個包含字典中鍵的列表

dict.iter()

方法 iteritems(), iterkeys(), itervalues()

與它們對應的非迭代方法一樣,不同的是它們返回乙個迭代子,而不是乙個列表。

dict.popc(key[, default])

和方法 get()相似,如果字典中 key 鍵存在,刪除並返回 dict[key], 如果 key 鍵不存在,且沒有給出 default 的值,引發 keyerror 異常。

dict.setdefault(key,default=none)

和方法 set()相似,如果字典中不存在 key 鍵,

由 dict[key]=default 為它賦值。

dict.update(dict2) 將字典 dict2 的鍵-值對新增到字典 dict

dict.values() 返回乙個包含字典中所有值的列表

11. 所有不可變的型別都是可雜湊的,因此它們都可以做為字典的鍵。

乙個要說明的是問題是數字:值相等的數字表示相同的鍵。換句話來說,整型數字 1 和 浮點數 1.0 的雜湊值是相同的,即它們是相同的鍵。

12. 數學上, 把 set 稱做由不同的元素組成的集合,集合(set)的成員通常被稱做集合元素(setelements)。python 把這個概念引入到它的集合型別物件裡。集合物件是一組無序排列的可雜湊的值.

13. 和其他容器型別一樣,集合支援用 in 和 not in 操作符檢查成員, 由 len() 內建函式得到集合的基數(大小), 用 for 迴圈迭代集合的成員。但是因為集合本身是無序的,你不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值。集合(sets)有兩種不同的型別,可變集合(set) 和 不可變集合(frozenset)。

14. 集合被建立的唯一方法 - 用集合的工廠方法 set()和 frozenset():

>>> s = set('cheeseshop')

>>> s

set(['c', 'e', 'h', 'o', 'p', 's'])

>>> t = frozenset('bookshop')

>>> t

frozenset(['b', 'h', 'k', 'o', 'p', 's'])

>>> s.add('z')

>>> s.update('pypi')

>>> s.remove('z')

>>> s -= set('pypi')

>>> s | t

>>> s & t

>>> s - t

>>> s ^ t

[/size]

Python2X學習16 python 列表

1 生成列表 要生成list 1,2,3,4,5,6,7,8,9,10 我們可以用range 1,11 print range 1,11 1,2,3,4,5,6,7,8,9,10 列表生成式則可以用一行語句代替迴圈生成 l x x for x in range 1,11 print l 1,4,9,...

Python2X學習4 python變數

變數是用乙個變數名表示,變數名必須是大小寫英文 數字和下劃線 的組合,且不能用數字開頭 a 1t 007 t007 在python中,等號 是賦值語句,可以把任意資料型別賦值給變數,同乙個變數可以反覆賦值,而且可以是不同型別的變數 a 123 a是整數 print aa imooc a變為字串 pr...

Python2 X輸入函式

mystr raw input 請輸入指令 import os os.system mystr 執行結果 ps input返回的是數值型別,如int,float raw inpout返回的是 字串型別 string型別 若輸入是表示式,則input會計算出表示式的值,而raw input會原樣輸出 ...