python中的資料型別之元組和字典
一、元組:俗稱不可變的列表,又被稱為只讀列表。元組用小括號括起來,裡面可以放任何資料型別的資料,查詢可以,迴圈也可以,切片也可以,但就是不能修改。
注意:如果元組中只有一個元素,一定要加一個逗號,否則就不是元組。
>>> tu = (1,"Tanxu","A") #建立一個元組,用小括號括起來 >>> type(tu) <class 'tuple'> >>> tu1 = ("Tanxu")#當小括號內只有一個元素時,不是元組 >>> type(tu1) <class 'str'> >>> tu2 = ("Tanxu",)#元組只有一個元素時,要在該元素後加一個逗號 >>> type(tu2) <class 'tuple'> >>> tu3 = ()#定義一個空元組 >>> type(tu3) <class 'tuple'>
注意:關於不可變,這裡元組不可變的意思是子元素不可變【即元組沒有修改操作】,而子元素內部的子元素可以改變,這取決於子元素是否是可變物件。【但是元組本身沒有改變】
>>> tu[2] = "Tan" #對元祖進行修改會報錯 Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> tu[2] = "Tan" TypeError: 'tuple' object does not support item assignment >>> tu4 = ("Tan","xu",[89,93,94]) >>> tu4[2][2] = 98 #可以對元素中子元素的子元素進行修改 >>> tu4 ('Tan', 'xu', [89, 93, 98])
元組也有count、index、len等操作,用法同列表
二、字典:字典是以{}括起來的,內部使用key:value的形式來儲存資料。如{“jay”:”周杰倫”,”jj”:”林俊杰”}
注意:字典的key必須是可雜湊的,不可變的【列表是不可雜湊的】
補充:什麼是可雜湊的(hashable)不該改變的(imutable)?【來自官方文件翻譯】
如果一個物件在自己的生命週期中有一雜湊值(hash value)是不可改變的,那麼它就是可雜湊的(hashable)的,因為這些資料結構內建了雜湊值,每個可雜湊的物件都內建了__hash__方法,所以可雜湊的物件可以通過雜湊值進行對比,也可以作為字典的鍵值和作為set函式的引數。所有python中所有不可改變的的物件(imutable objects)都是可雜湊的,比如字串,元組,也就是說可改變的容器如字典,列表不可雜湊(unhashable)。我們使用者所定義的類的例項物件預設是可雜湊的(hashable),它們都是唯一的,而hash值也就是它們的id()。
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> type(dic1) <class 'dict'>
1、字典的相關操作:
1)增加:
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> dic1['height'] = 160 #直接新增,如果key重複了,會替換掉原來的value >>> dic1 {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': 160} >>> dic1.setdefault('weight',45)#使用setdefault()新增元素時,返回的是value值;如果字典中存在了這個key,則不再進行儲存操作 45 >>> dic1 {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': 160, 'weight': 45}
2)刪除:
>>> dic1.pop("weight")#刪除一個元素,會返回這個元素對應的value值 45 >>> dic1.popitem()#刪除一個元素,返回這個元素的key和value,返回的是一個元組。預設刪除最後一個元素 ('height', 160)
>>> dic1.clear()#清空字典
>>> dic1
{}
3)查詢:
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> dic1['name'] #如果key值存在,會返回其對應的value值;如果key值不存在,程式會報錯 'Tanxu' #get方法:1)可以通過key值獲取value的值,如果key不存在,預設返回None >>> print(dic1.get("Tanxu")) None >>> print(dic1.get('name')) Tanxu #2)如果設定了預設返回值,則當key不存在時,返回該預設值 >>> print(dic1.get('height','160')) 160 #setdefault操作==》1、首先判斷原來的字典中有沒有這個key,如果沒有則執行新增 # 2、用這個key去字典中查詢,返回查到的結果 >>> ret1 = dic1.setdefault("name",1) >>> print(ret1) Tanxu >>> ret2 = dic1.setdefault("height",160) >>> print(ret2) 160
4)d1.update(d2) ==》把d2的k-v更新到d1中
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> dic2 = {"height":"160","weight":"45"} >>> dic1.update(dic2) >>> dic1 {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': '160', 'weight': '45'}
2、字典的其他相關操作
1)得到字典中的key,value以及鍵值對
print(dict1.keys()) #拿到所有的key,返回key的集合,該集合可迭代迴圈 ##for key in dict1.keys(): #迴圈遍歷key值 ## print(key) print(dict1.values()) #拿到所有的value,返回value的集合,該集合可迭代迴圈 ##for value in dict1.values(): #迴圈遍歷value值 ## print(value) print(dict1.items()) #拿到所有的鍵值對,每一項都是元組,元組集合也可迭代 ##for item in dict1.items():#迴圈遍歷key:value鍵值對 ## print(item)#返回元組 ## print(item[0]) #返回key ## print(item[1]) #返回value
#遍歷字典
for k,v in dic1.items():
print(k)
print(v)
2)解構,解包
##解構 解包 a,b = (1,2) #即把a賦值為1,b賦值為2 print(a)
3)字典的巢狀
dic = { "name":"Tanxu", "age":"19", "hobby":"listen music", "frend1":{ "name":"李四", "age":"22", "hobby":"writting" }, "frend2":{ "name":"王五", "age":"19", "hobby":"singing" } } print(dic["frend1"]["name"])
三、range操作(迭代迴圈)
語法:
range(開始,結束,步長)預設開始可以取到,結束取不到,步長可以為負數
例項:
1、迴圈:for i in range(10): #列印0 - 9 Print(i) 2、迴圈:for i in range(3,9): #列印3 - 8 Print(i) 3、迴圈:for i in range(3,10,2): #列印3,5,7,9 Print(i) 4、迴圈:for i in range(10,1,-1): #列印10,9,8,7,6,5,4,3,2 Print(i) 5、迴圈:for i in range(10,-10,-1): #列印10,9,8,7,6,5,4,3,2,1,0,-1,-2,……,-9 Print(i)