1. 程式人生 > >python中的資料型別之元組和字典

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

  4d1.update(d2)  ==》把d2k-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)