day 05
字典:
1、列表如果儲存大量資料,查詢速度相對慢一些
2、列表儲存的資料,一般沒有什麼關聯性
針對以上原因,python提供了一個基礎資料型別,dict 字典
資料型別的分類 :
容器型資料型別:list, tupel,dict,set
非容器型資料型別: str , bool , int
可變(不可雜湊)的資料型別: list, dict,set
不可變(可雜湊)的資料型別:str , int, bool, tuple
{‘name’:‘alex’} 以鍵值對形式儲存的資料型別
1、 字典的鍵必須是不可變的資料型別,唯一的,不重複。 重複則後面的覆蓋之前的
字典的值可以是任何資料型別(物件)
2、字典的查詢速度非常快
3、字典在python3.5之前是無序的,單是3.6優化機制,字典會按照建立字典之處的資料排列
4、字典可以儲存大量的關聯性資料
# 字典巢狀字典列表 dic = {'name': 'alex','python':['biilgas','春哥', '二師兄'], '太白':{ 'name':'太白金星', 'id': 1306546743423, 'phone': 1358225xxxx, 'sex': '男' } }
2、字典的增刪改查
增: 有則覆蓋,無則新增
dic['keys'] = ' value '
dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic['high'] = 179
print(dic) # {'name': 'barry', 'age': 18, 'sex': 'man', 'high': 179} #有則覆蓋,無則新增
dic['name'] = 'chencp'
print(dic) #{'name': 'chencp', 'age': 18, 'sex': 'man', 'high': 179} #有則覆蓋,無則新增
setdefault 有則不變,無則新增
dic.setdefault('KEYS', 'value') 如果不填value,則為None
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.setdefault('high') print(dic) #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}
dic.setdefault('name', 'chencp')
print(dic) #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}
刪:
1、pop 通過鍵刪除對應值
dic.pop('key') dic.pop(' key' , ' 沒有這個鍵 ‘) 如果沒有健,可以自定義返回值 *****
dic = {'name': 'chencp', 'age': 18, 'sex': 'man'}
dic.pop('name1', '沒有該鍵') # 沒有鍵則返回自定義的值 print(dic.pop('name1', '沒有該鍵') # 沒有改鍵
)
print(dic) # {'name': 'chencp', 'age': 18, 'sex': 'man'}
2、clear 清空字典的鍵值對,保留字典ID
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.clear() print(dic) # {}
3、popitem 刪除最後一個鍵值對 (3.5及以前版本,是隨機刪除。因為3.5之前版本字典是無序)
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} dic.popitem() # 3.5之前是隨機刪除,3.6刪除最後一個鍵值對 3.5之後Python優化了 字典變成有序的 print(dic) # {'name': 'barry', 'age': 18}
4、del
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} del dic # 刪除整個字典id
一次只能刪除一個鍵,沒有則報錯。還是用pop好一點
dic = {'name': 'barry', 'age': 18, 'sex': 'man'} del dic['name1'] # 一次只能刪除一個鍵,沒有則報錯。還是用pop好一點 print(dic)
改:
dic[' key '] = ' value ' 覆蓋原有的key的value
dic = {'name': 'barry', 'age': 18} dic['age'] = 14 print(dic) # {'name': 'barry', 'age': 14} dic['age', 'name'] = 14, 'alex' print(dic) # {'name': 'barry', 'age': 14, ('age', 'name'): (14, 'alex')} 把兩個鍵當一個元組,組合成一個鍵
update 有兩種方式:
1、 把dic1 update到 dic2
dic1 = {"name": "jin", "age": 18, "sex":"male"} dic2 = {"name": "alex","weight": 75} dic2.update(dic1) # 將dic1字典中的鍵值對覆蓋新增到dic2中,dic1不變。 print(dic1) # {'name': 'jin', 'age': 18, 'sex': 'male'} print(dic2) # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}
2、dic.update(weight=145, high=182)
dic1 = {"name": "jin", "age": 18} dic1.update(weight=150, higi=178) # key不在dic1中,則增加 print(dic1) # {'name': 'jin', 'age': 18, 'weight': 150, 'higi': 178} dic1.update(name=150) # key在dic1中,則修改 print(dic1) # {'name': 150, 'age': 18, 'weight': 150, 'higi': 178}
查:
1、按照鍵查對應的值
print(dic['name'])
print(dic['name1']) # 沒有此鍵會報錯
2、用gat查 ,不會報錯 *********
dic = {"name": "jin", "age": 18} ret = dic.get('age') # 列印 18 ret = dic.get('age1') # 列印None ret = dic.get('age1','沒有此鍵') #列印 '沒有此鍵' print(ret)
3、直接迴圈字典,獲取所有key
for i in dic: print(i)
4、 dic.keys() , dic.values() dic.item() ***
dic = {"name": "jin", "age": 18} # dic.keys() dic.values() dic.items() # 上面三個都是返回一個類似於列表的容器的特殊資料型別。 print(dic.keys()) for key in dic.keys(): print(key) print(dic.values()) for value in dic.values(): print(value) print(dic.items()) for item in dic.items(): print(item)
dic = {"name": "jin", "age": 18} for k, v in dic.items(): print(k, v) # 便利,key和value, 可只打印k或v
字典的巢狀
dic = { 'l1': ['alex', '太白'], 'id': 3, 1: { 'data': 20181225, 'place': '深圳校區', 'class': 'python3期', 'name_list': ['小潘', 'jay', '春哥', 'xx'], } } # 1,給小列表['alex', '太白'] alex後面插入一個字串,'aaa' dic['l1'].insert(1, 'aaa') print(dic) dic2 = {'l1':['alex','aaa', '太白']} # dic.update(dic2) # print(dic)
# 2,將id對應的3變成1. dic['id'] = 1 print(dic)
# 3,將 1 對應的字典的data變成20181224, dic[1]['data'] = 20181224 print(dic) dic[1]['data'] -= 1 print(dic)
# 4,將name_list對應的jay全部變成大寫。 dic[1]['name_list'][1] = dic[1]['name_list'][1].upper() print(dic)
# 4,將name_list對應的 xx 刪除。 dic[1]['name_list'].pop() dic[1]['name_list'].remove('xx') del dic[1]['name_list'][-1] print(dic)
格式化輸出:
# 通過字典的方式 dic = {'name': '太白', 'sex': '男', 'age': 18} msg = '我叫%(name)s,今年%(age)s,性別%(sex)s' % dic print(msg)
fromkeys(iterable,value) 返回一個新的字典,其中鍵來自iterable,值等於值
dic = {'name': 'alex'} dic = dict.fromkeys('abc', '春哥') #{'a': '春哥', 'b': '春哥', 'c': '春哥'} dic = dict.fromkeys([1, 2, 3],'春哥') # {1: '春哥', 2: '春哥', 3: '春哥'} # 坑:值如果是可變的資料型別,那麼所有的值都是一個記憶體地址 dic = dict.fromkeys([1, 2, 3], ['alex']) #{1: ['alex'], 2: ['alex'], 3: ['alex']} dic[1].append(666) #{1: ['alex', 666], 2: ['alex', 666], 3: ['alex', 666]} print(dic)