字典是」鍵值對「的無序可變序列,其中每個元素都是乙個」鍵值對「,包含」鍵物件「和」值物件「。
就像可通過列表元素索引值獲取對應物件,我們可通過」鍵物件「獲取、刪除、更新其對應的值物件。
鍵必須是不可變資料,如整數、浮點數、字串、元組,不能是字典、列表、集合等可變物件,
鍵不可重複。若重複出現鍵,則後面的覆蓋前面的。
方法1:
a=b=dict(a=『bc』,d=『fg』)
c=dict([(『a』,『bc』),(『d』,『fg』)])
d={}或d=dict()
方法2:
通過zip()建立。如:
k=[『a』,『d』]
v=[『bc』,『fg』]
d=dict(zip(k,v))
d=方法3:
通過fromkeys()建立值為空的字典
a=dict.fromkeys([『a』,『d』])
a: a=
方法1:
通過鍵,獲取值。若值不存在,則丟擲異常。
a[『a』]: 『bc』
a[『d』]: 『dg』
方法2:
get()方法。若指定鍵不存在則返回none。也可指定鍵不存在時預設返回的物件。推薦使用該函式。
a.get(『a』): 『bc』
a.get(『haha』): none
a.get(『haha』,『好人』): 『好人』
方法3:
items()方法,獲取所有鍵值對。
a.items(): dict_items([(『a』,『bc』),(『d』,『fg』)])
方法4:
keys()方法,列出所有的鍵。
a.keys(): dict_keys([『a』,『b』])
values()方法,列出所有的值
a.values(): dict_values([『bc』,『fg』])
方法5:
len(a),返回鍵值對的個數
方法6:
檢測乙個鍵是否在字典中。
『a』 in a: true
方法1:
給字典新增鍵值對。若新增的」鍵「不存在,則新增鍵值對;若」鍵「已存在,則覆蓋先前的鍵值對。
若a[『abc』]=『def』
a: 若a[『a』]=『mn』
a:方法2:
a.update(b): 將b字典中所有鍵值對都新增進a字典。若鍵有重複,則直接覆蓋。
方法3:
字典中元素刪除:
del()方法:del(a[『a』]),刪除以』a』為鍵的鍵值對。
a.clear(): 刪除所有鍵值對
a.pop(『a』): 刪除指定鍵值對,並返回』a』對應的值物件』bc』
a.popitem(): 隨即刪除和返回某鍵值對。
若想乙個乙個地移除並處理項,此方法很有效,
因為不需要首先獲取鍵的列表。
序列解包可用於列表、元組、字典。可方便地對多個變數賦值。
(x,y,z)=(20,30,10)
x,y,z=(20,30,10)
[x,y,z]=[20,30,10]
序列解包用於字典時,預設是對鍵進行操作。如:
a=x,y=a: x=『a』, y=『d』
若需對鍵值對進行操作,則:
x,y=a.items():x=(『a』,『bc』), y=(『d』,『fg』)
若需對值進行操作,則:
#獲得第二行的人的薪資:
tb[1].get(『salary』)
字典物件的核心是雜湊表。雜湊表是乙個稀疏陣列(總是有空白元素的陣列),陣列的每個單元叫bucket,每個bucket分為鍵物件的引用和值物件的引用兩部分。
由於所有bucket大小和結構一致,因此可以通過偏移量讀取指定bucket。
將乙個鍵值對放進字典的底層過程
假設字典物件建立完成後,陣列長度為8。
要將某鍵值對放進字典物件:
第一步是計算鍵的雜湊值(雜湊值),用hash()方法計算。
第二步是拿計算出的雜湊值的最後三位數字對應的十進位制數作為偏移量,並檢視該偏移量對應的bucket是否為空。若為空,就存入;若非空,則再取倒數第二組三位數字對應的十進位制數作為偏移量。以此類推,直到找到空的bucket。
(一組取幾位數字,與陣列當前長度有關。8對應四位二進位制數,則取3位;32對應6位二進位制數,則取5位)
擴容:
python會根據雜湊表的擁擠程度擴容。若陣列空間已占用接近2/3,則將建立新陣列並將原有內容拷貝進新陣列。
根據鍵查詢鍵值對的底層過程
第一步是計算用於查詢的鍵的雜湊值;
第二步是取雜湊值最後n位二進位制數(n與陣列長度相關),並進製轉換得到索引值;
第三步是檢查該索引值對應的bucket是否為空。若為空,則返回none;若不為空,則取出bucket中的鍵並計算其雜湊值,與用於查詢的鍵的雜湊值對比;
第四步是若兩雜湊值相等,則返回這個bucket中的值物件;若不相等,則再取雜湊值的倒數第二組數,得到新的索引值並查詢、對比。以此類推。
鍵必須可雜湊:
字典占用記憶體巨大,但用鍵查詢速度很快。
不要在遍歷字典時進行字典修改:
往字典裡新增新鍵可能導致擴容,使雜湊表中鍵的次序變化。若需修改字典,應先遍歷、提取所需元素,然後修改。
集合是無序可變序列,且其中元素不能重複。
集合的底層是字典實現,其所有元素都是字典中的鍵物件。
集合建立、增加和刪除
建立: a=
或b=[1,3,4], set(b)
set()可將列表、元組等可迭代物件轉換為集合。若原對
象存在重複資料,則只保留乙個。
增加:a.add(x)
刪除:a.remove(x), 刪除指定元素x
a.clear(): 清空整個集合
集合相關操作
a|b a.union(b) 並集
a&b a.intersection(b) 交集
a-b a.difference(b) 差集
單分支結構:
若條件表示式為true,則執行語句塊;
否則,跳過語句塊,繼續執行。
▲在選擇和迴圈結構中,條件表示式值為false的情況有:
false, 0, 0.0, 空值none,空序列物件,空range物件,空迭代物件
除以上情況外,條件表示式值均為true。
因此,python中所有合法的表示式均可看作條件表示式,甚至包括函式呼叫的表示式。
雙分支結構:
條件表示式為true,執行語句塊1;
條件表示式為false,執行語句塊2.
對簡單的雙分支賦值情況,可使用三元條件運算子,如:
print(num if num<10 else 『數字太大』)
多分支結構
迴圈結構:
迴圈結構用於反覆執行一條或多條語句。
若符合條件,則執行迴圈體中的語句。每次執行完,都再判斷一遍條件是否為true。若為true,則繼續執行迴圈體中的語句;若為false,則跳出迴圈。
迴圈體中的語句應至少包含改變條件表示式的語句,以使迴圈能趨於結束。
python學習 GUI第四節
今天用gui內容寫乙個加法計算器 需要三個對話方塊及乙個按鈕 from tkinter import master tk v1 strin ar v2 strin ar v3 strin ar def text content 測試輸入是否為數字,若不是數字則不能錄入 return content....
ObjC第四節 繼承
繼 承 1 繼承 1.1 nsobject,根類,oc建立的類都繼承自根類,位於類層次結構的頂層,沒有父類 1.2 父類的例項變數和方法都可以被隱式的繼承過來成為子類的一部分,子類就可以直接訪問這些例項變數和方法 1.3 alloc和init是繼承自nsobject的方法 1.4 繼承的概念呈單鏈繼...
第四節 條件語句
if語句 if v 100else if v 50elseif語句不需要括號 用法高階 const filename abc.txt if contents,error ioutil.readfile filename error nilelse注意 contents和error變數都是在if 塊中...