python學習_7——字典dict

字典 dict:

1)字典介紹

字典是一個非序列容器
1.字典是一種可變的容器,可以存儲任意類型的數據
2.字典中的每個數據都是用“鍵”key進行索引,而不是想序列(str,list,tuple)可以用整數下標進行索引
3.字典的數據沒有先後的順序關係,字典的存儲是無序的
4.字典中數據以鍵"key"-值"value"對的形式進行存儲
5.字典的key不可以重複,且只能用不可變的類型作爲字典的鍵

2)字典的創建方式

1.創建字典的字面值方式:
字典的表示方式以“{ }”括起來,以冒號“:”分割鍵值對,各鍵值對之間用逗號隔開。
示例:
創建空字典:

d = {}

創建非空字典:

d = {"name":"Guisam","age":21,2:"two",3:[1,3]} 

注:字典的鍵必須爲不可變類型的值

2.創建字典的構造函數:

dict()			#生成一個空的字典 等同於{}
dict(iterable)	#用可迭代對象創建,但可迭代對象每個數據項必須擁有一對數據
dict(**kwargs)	#關鍵字傳參形式生成一個字典
dict(mapping)	#通過mapping對象的key,value部分數據創建dict

示例:

 itera = ([1,2],[2,4],'AB')
 d = dict(itera)	 		#d = {1: 2, 2: 4, 'A': 'B'}
 d = dict(a = 1,n = '2')	#d = {'a': 1, 'n': '2'}
 #注意前面的key:a和n不能加引號'',此處爲關鍵字傳參,前面爲變量名即key,後面爲值

#用此方法無法創建key爲整數型類型之類的字典,因爲無法把一個常數作爲一個變量名
eg:無法用此方法創建 d = {1:2},因爲如果key要爲“2”,用此方法則爲d = { 1 = 2 } ,但字面值不能作爲一個賦值運算的左側

3.字典推導式;
字典推導式是用可迭代對象來創建字典的表達式

語法:

{鍵表達式:值表達式 for 變量 in 可迭代對象 [if 真值表達式]}
注:[]的內容可以省略

示例;
生成一個字典:鍵的值爲0~9,值爲鍵的平方

d = { x : x**2 for x in range(0,10)}
#d = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

字典推導式的嵌套:
語法同列表推導式嵌套

在前面我們講元組時說了元組時不可變數據類型,而list和dict字典時可變的數據類型,那麼關於python的可變數據類型有哪些的?
其實python自帶的可變類型只有有四種:
list()/列表,dict()/字典,set()/集合,bytarray()/字節數組
注:除上四種其他均爲不可變的數據類型,上面這四種類型永遠不能作爲字典的鍵

3)字典的基本操作:

1.字典的鍵索引
語法:
字典[鍵]
作用:
用鍵獲取字典的鍵對應的值
示例:

d = {"name":"myname","age":15}
print(d[name])		#結果爲:"myname"

2.添加和修改字典的元素:
添加字典元素
語法

字典[key] = value
說明:
鍵不存在時,創建鍵,並讓鍵綁定對應的值
鍵存在是,修改鍵綁定的值爲value
示例:

d = {}
d["name"] = "myname"	#添加一個鍵值對
d["age"] = 17			#添加一個鍵值對
d["age"] += 1			#修改key對應的值

刪除字典元素:
del 語句
語法:
del 字典[key]
示例:

d = dict(name = "myname",age = 12)
del d['age']
print d		#d = {"name":"myname"}

3.字典的鍵判斷 in ,not in運算符
可以用 in 運算符判斷一個鍵是否在字典中,如果存在返回True,否則返回False
not in 返回值與 in 相反
只能對key進行判斷,無法判斷value
字典的 in 與 not in運算要快於列表中的in ,not in運算

示例:

d = dict(name = "myname",age = 12)
"name" in d	#True
12 in d		#False
"age" not in d	#False

4.字典的迭代訪問
字典是可迭代對象,字典只能對鍵進行迭代訪問

示例:

d = {0:“零”,2:“貳”,3:“叄”,8:“捌”}
for n in d:
	print(n)	#0,2,3,8
	print(d[n])	#“零”,“貳”,“叄”,“捌”

注意:字典之間不支持 + * 比較等運算

5.可以用於字典的函數:(注意與該方法在list和tuple裏對於字典的區別)

函數 作用
len(x) 返回字典的鍵值對的個數
max(x) 返回字典的鍵的最大值,要求所有的鍵值之間必須可以比較
min(x) 返回字典的鍵的最小值,其餘同max
sum(x) 返回字典的所有鍵的和,要求所有的鍵值之間必須可以求和
any(x) 真值測試,只對鍵進行測試,只要一個鍵爲真值,則返回True
all(x) 所有鍵爲真值則返回True

6.字典的方法:

方法 作用
D.clear() 清空字典
D.pop(key) 移除鍵,同時返回此鍵所對應的值
D.copy() 返回字典D的副本,只複製一層(淺拷貝)
D.update(D2) 將字典 D2 合併到D中,如果鍵相同,則此鍵的值取D2的值作爲新值
D.get(key, default=None) 返回鍵key所對應的值,如果沒有此鍵,則返回default
D.keys() 返回可迭代的 dict_keys 集合對象
D.values() 返回可迭代的 dict_values 值對象
D.items() 返回可迭代的 dict_items 對象

注:如果使用d[key]去獲取相應的value時,如果此key不存在則會報錯,所以可以用get()方法

示例:

#1.已知有如下字符串列表:
L = ['DAD','DA','FAFA']
#生成字典:d = {'DAD':3,'DA':2,'FAFA':4}
d = { x:len(x) for x in L}
#2.
Nos = [1001,1002,1005,1006]
names = ["Tom","Hers","Kada","UZI"]
#試生成字典:d = {1001: 'Tom', 1002: 'Hers', 1005: 'Kada', 1006: 'UZI'}
for i in range(0,4):						#方法1
	d[Nos[i]] = names[i]
d = {Nos[i]:names[i] for i in range(0,4)}	#方法2

4)字典 VS 列表

1.都是可變的容器
2.索引方式不同,列表用整數索引,字典用鍵索引
3.列表的存儲是有序的,字典的存儲是無序的
4.字典的插入,刪除,修改的速度可能會快於列表(重要)
5.字典的內部實現:hash表或者紅黑樹;列表的內部實現:動態數組

下一篇:python學習_8——集合set與固定集合frozenset

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章