1. 程式人生 > >python基礎教程(第三版)學習筆記(四)

python基礎教程(第三版)學習筆記(四)

第四章 字典
字典一種可通過名稱來訪問其各個值的資料結構。這種資料結構稱為對映。字典是Python中唯一的內建對映型別,其中的值不按順序排列,而是儲存在鍵下。鍵可能是數、字串或元組。
4.1 字典的用途
i表示棋盤的狀態,其中每個鍵都是由座標組成的元組;
ii儲存檔案修改時間,其中的鍵為檔名;
iii數字電話/地址簿。
4.2 建立和使用字典
建立字典的格式為一對大括號{}和冒號:
{鍵名:值}
4.2.1 函式dict
可使用函式dict從其他對映(如其他字典)或鍵-值對序列建立字典。其實dict是字典的建構函式(關於建構函式以後說)。
'''

item=[('name','張玉'),('李四',43)]
d=dict(item)
print(d)

'''

{'name': '張玉', '李四': 43}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


還可以使用關鍵字實參來呼叫這個函式,如下所示:
'''

d=dict(name='張玉','李四'=42)
print(d)

'''

{'name': '張玉', '李四': 42}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


4.2.2基本的字典操作
字典的基本行為在很多方面都類似於序列。
i   len(d)返回字典d;包含的項(鍵值對)數。
ii  d[k]返回與鍵k相關聯的值。
iii d[k] = v將值v關聯到鍵k。
iv  del d[k]刪除鍵為k的項。
v   k in d檢查字典d是否包含鍵為k的項。
雖然字典和列表有多個相同之處,但也有一些重要的不同之處。
鍵的型別:字典中的鍵可以是整數,但並非必須是整數。字典中的鍵可以是任何不可變的型別,如浮點數(實數)、字串或元組。
自動新增:即便是字典中原本沒有的鍵,也可以給它賦值,這將在字典中建立一個新項。
然而,如果不使用append或其他類似的方法,就不能給列表中沒有的元素賦值。
成員資格:表示式k in d(其中d是一個字典)查詢的是鍵而不是值,而表示式v in l(其中l是一個列表)查詢的是值而不是索引。這看似不太一致,但你習慣後就會覺得相當自然。畢竟如果字典包含指定的鍵,檢查相應的值就很容易。
字典的定義{鍵:值}例如:
'''

results={"張三":68,"李四":94,"王五":88}
print(results,type(results))

'''

{'張三': 68, '李四': 94, '王五': 88} <class 'dict'>


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


字典的鍵是唯一的不能重複。
'''

result={'張三':68,'李四':94,'王五':88,'張三':77}
print(result,type(result))

'''

{'張三': 77, '李四': 94, '王五': 88} <class 'dict'>


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


可以用format設定字典的格式。
'''

print("張三的成績是{張三}".format_map(results))

'''

張三的成績是68


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


像這樣使用字典時,可指定任意數量的轉換說明符,條件是所有的欄位名都是包含在字典中的鍵。在模板系統中,這種字串格式設定方式很有用(下面的示例使用的是HTML)
'''

template='''
<html>
    <head>
        <title>{title}</title>
    </head>
    <body>
        <h1>{text}</h1>
        <p>{title}</p>
    <body>
</html>

'''
date={'title':'Hello world','text':'歡迎您:'}
print(template.format_map(date))

'''

<html>
        <head>
                <title>Hello world</title>
        </head>
        <body>
                <h1>歡迎您:</h1>
                <p>Hello world</p>
        <body>
</html>



------------------
(program exited with code: 0)

請按任意鍵繼續. . .

4.2.3 字典的方法
1、clear
刪除所有的字典項,這種操作是就地執行的(就像list.sort一樣),因此什麼都不返回(或者說返回None)。
clear和賦予空字典的區別:
'''

x={}
y=x
x['鍵']='值'    
print(x)
print(y)
x={}
print("x={}後的字典")
print(x)
print(y)
print("下面用clear:")
a={}
b=a
print(a)
print(b)
print('clear後的字典:')
print(a)
print(b)

'''

{'鍵': '值'}
{'鍵': '值'}
x={}後的字典
{}
{'鍵': '值'}
下面用clear:
{}
{}
clear後的字典:
{}
{}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


2、copy
返回一個新字典,其包含的鍵-值對與原來的字典相同(這個方法執行的是淺複製,因為值本身是原件,而非副本)。
一種辦法是執行深複製,即同時複製值及其包含的所有值,等等。為此,可使用模組copy中的deepcopy函式。
3、fromkeys
建立一個新字典,其中包含指定的鍵,且每個鍵(注意:用[]括起來,否則會出現意想不到的結果)對應的值都是None。
'''

print({}.fromkeys(["姓名","年齡"]))

'''

{'姓名': None, '年齡': None}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


這個示例首先建立了一個空字典,再對其呼叫方法fromkeys來建立另一個字典,這顯得有點多餘。你可以不這樣做,而是直接對dict(dict是所有字典所屬的型別。)呼叫方法fromkeys。
'''

print(dict.fromkeys(["姓名","年齡"]))

'''

{'姓名': None, '年齡': None}
{'姓名': None, '年齡': None}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


4、get
訪問字典中沒有的項。
'''

print(results.get('張三'))

'''

68


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


沒有被訪問的項返回None,不會報錯。
5、items
返回一個包含所有字典項的列表,其中每個元素都為(key, value)元組。字典項在列表中的排列順序不確定。
'''

print(results.items())

'''

dict_items([('張三', 68), ('李四', 94), ('王五', 88)])


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


6、key
返回指定字典中的鍵。
7、values
返回指定字典中的值。
8、pop
彈出字典中指定鍵的元素。
'''

c={"a":1,"b":2,"c":3}
print(c)
print(c.pop("b"))
print(c)

'''

{'a': 1, 'b': 2, 'c': 3}
2
{'a': 1, 'c': 3}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


9、popitem
隨機地彈出字典的項。
10、setdefault
有點像get,因為它也獲取與指定鍵相關聯的值,但當在字典不包含指定的鍵時,setdefault將在字典中新增指定的鍵-值對,並返回None。
'''

print(c.setdefault("d"))
print(c)

'''

None
{'a': 1, 'c': 3, 'd': None}


------------------
(program exited with code: 0)

請按任意鍵繼續. . .


11、uptate
使用一個字典中的項來更新另一個字典。對於通過引數提供的字典,將其項新增到當前字典中。如果當前字典包含鍵相同的項,就替換它。
(待續)