字典是另一種可變容器模型,且可儲存任意型別物件。
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
dict =
#鍵必須是唯一的,但值則不必。
dict =
1.按key取值:
print(dict['username']) # dlrb
print(d1['***']) # 鍵不存在直接報錯
"""涉及到字典取值 更加推薦下面的方式"""
2.get()
print(d1.get('name')) # dlrb 鍵存在
print(d1.get('***')) # none 鍵不存在不會報錯 而是返回none
print(d1.get('***', '不存在')) # 第二個引數不寫預設返回none 寫了則返回寫了的
print(d1.get('name', '不存在')) # 如果鍵存在 則不需要使用到第二個引數
3.setdefault()
setdefault() 方法和get()方法類似, 如果鍵不已經存在於字典中,將會新增鍵並將值設為預設值
dic =
print(dic.setdefault('k3', 333)) # 鍵不存在則新增鍵值對 並且有返回結果是新增的v
print(dic)
print(dic.setdefault('k1', '嘿嘿嘿')) # 鍵存在 則返回對應的值 不做修改
print(dic)
111
dict =
dict['username'] = 'mark' # 鍵存在是修改值
print(dict)
dict['class'] = 'first'
print(dict) # 鍵不存在則是新增乙個鍵值對
#
dict =
print(len(dict)) # 3
dict =
print('username' in dict) # true
print('dlrb' in dict) # false
in 操作符用於判斷鍵是否存在於字典中,如果鍵在字典dict裡返回true,否則返回false
'只能判斷key'
dict =
1.del 刪除
del dict['username']
print(dict) #
2.pop()
print(dict.pop('age')) # 18 彈出
print(dict) #
3. dict.popitem() # 隨機彈出乙個(使用頻率很低 可以忽略)
print(dict)
#
'''方法隨機返回並刪除字典中的一對鍵和值(一般刪除末尾對)。
如果字典已經為空,卻呼叫了此方法,就報出keyerror異常。'''
keys() .獲取所有的鍵 所有的值 所有的鍵值對
dict =
print(dict.keys()) # dict_keys(['name', 'age', 'hobbies']) 可以看成是列表
values() 方法以列表返回字典中的所有值
print(dict.values()) # dict_values(['dlrb', 18, ['play game', 'basketball']])
'''可以看成是列表'''
print(d1.items()) # dict_items([('username', 'dlrb'), ('age', 18), ('hobbies', ['play game', 'basketball'])])
'可以看成是列表套元組'
"""在python2中上述三個方法就是直接返回乙個列表 """
1.update更新字典
dic =
dic.update()
print(dic) # 鍵存在則修改 鍵不存在則新增
2.fromkeys()快速生成字典
函式用於建立乙個新字典,以序列k1,k2,k3中元素做字典的鍵,value為字典所有鍵對應的初始值。
dic1 =dict.fromkeys(['k1','k2','k3'],)
print(dic1) #
print(dic) #
元組其實就是不可變的列表
列表可讀可改, 而元組唯讀不能改
同等資料型別下, 元組更加節省空間, 並且效率更高於列表
因為元組底層只提供讀的機制, 而列表既有讀也有改的機制
在 「( )」 內用逗號分隔開多個任意型別的元素
如果元組內只包含乙個元素, 那麼需要用逗號隔開: (111,)
元組不可變指的是第一層元素的記憶體位址不能改變
如果第一層裡面包含乙個子列表, 那麼子列表的記憶體位址不能改變, 但可以改變子列表裡面的元素(列表可變型別)
「工廠」 : tuple
# 可以看成是不可變的列表
1.型別轉換
支援for迴圈的資料型別都可以轉成元組
# print(tuple(11)) # 報錯
# print(tuple(11.11)) # 報錯
print(tuple('jason'))
print(tuple([11,22,33,44]))
print(tuple())
print(tuple())
# print(tuple(true)) # 報錯
"""一般情況下 我們會習慣性的將所有可以儲存多個資料的型別的資料
如果內部只有乙個元素 也會加逗號
(1,)
[1,]
"""2.索引取值
tup = (11,22,33,44,55)
print(tup[0]) # 11 正向取
print(tup[-1]) # 55 反向取
3.切片操作 #顧頭不顧尾
tup = (11,22,33,44,55)
print(tup[1:4]) # (22, 33, 44)
print(tup[-1:-4:-1]) # (55, 44, 33)
print(tup[-4:-1]) # (22, 33, 44)
tup2 = tup[::-1]
print(tup2) # (55, 44, 33, 22, 11)
4.統計元組內元素的個數
print(len(tup)) # 5
5.成員運算 in 和 not in
print(66 in tup) # false
print(11 in tup) # true
6.統計某個元素出現的次數
tup = (11,22,11,33,11,44,11,55,11,66)
print(tup.count(11)) # 5
7.元組內元素不能"修改": 元組內各個索引值指向的記憶體位址不能修改
# t1[0] = 111
"""筆試題
tt = (11, 22, 33, [11, 22])
問:執行之後的結果 正確答案選b
a.報錯 b.正常新增 c.不知道
"""tt = (11, 22, 33, [11, 22])
print(id(tt[-1]))
print(id(tt[-1]))
print(tt)
'''集合主要作用:去重;關係運算'''
集合的元素遵循三個原則:1:每個元素必須是不可變型別(可hash,可作為字典的key);2:沒有重複的元素;3:無序
1.型別轉換
print(set(11)) # 報錯
print(set(11.11)) # 報錯
print(set('jason'))
print(set([11,22,33,44]))
print(set())
print(set((11,22,33)))
print(set(true)) # 報錯
"""集合內元素只能是不可變型別"""
"""集合只會在去重和關係運算中使用 甚至有時候也不會用"""
2.關係運算
f1 = # 小李的好友列表
f2 = # 小王的好友列表
# 1.求兩個人的共同好友
print(f1 & f2) #
# 2.求小李的單獨好友
print(f1 - f2) #
# 3.求兩個人所有的好友
print(f1 | f2) #
# 4.求兩個人各自的好友
print(f1 ^ f2) #
"""python底層針對空間的申請和釋放都是設計好的 不需要程式設計師操心"""
1.引用計數
python會將引用計數為0的資料清除
name = 'jason' # jason引用計數為1
a = name # jason引用計數為2
'''記憶體中資料身上繫結的變數名的個數'''
# ps:還可以了解一下迴圈引用的情況
2.標記清除
當記憶體空間即將溢位(滿了)的時候 python會自動啟動應急機制
停止程式的執行 挨個檢查值的引用計數並給計數為0的資料打上標記
然後一次性清理掉
3.分代**
根據值存在的時間長短 將值劃分為三個等級(1,2,3)
等級1 檢測機制每隔5s來一次
等級2 檢測機制每隔1min來一次
等級3 檢測機制每隔5min來一次
python 元組字典集合
2.刪除元組 3.訪問元組元素 4.修改元組元素 字典集合 異同點簡介 所有的元素都放在 裡,相鄰的元素之間用 相隔開,而元組中可以存放整數,實數,字串,列表,元組等任何型別的內容。tuple 1,123 abc python nb 其實小括號並不是必須使用的,若執行下面程式,再用type 函式檢查...
Python 元組 字典 集合
3 集合 my tuple 10.20,30,40 my tuple 2 80 print my tuple 2 my tuple 2 80 typeerror tuple object does not support item assignmentmy tuple 10 print my tup...
列表,字典,元組,集合內建方法
l1 44,22,11,33,99,77,88,66 l1.sort 預設是公升序 l1.sort reverse true 引數指定 降序 print l1 l1.reverse 循序顛倒 print l1 print l1 1 5 print l1 1 冒號左右兩邊不寫數字預設全都要 print...