字典:python
基礎數據類型之一,{}以鍵值對的形式存儲數據。 dic = {'name':'Laonanhai','age':45} 以Key:value形式,映射,存儲的大量的關係型數據。 關係型數據:
dic = {'name':'laonanhai',
'age':'45',
'name_list':['反面教材','俊俊',...]
}
數據類型的分類 可變(不可哈希hash): 不可變(可哈希hash): 容器類: 容器類的數據類型:list,tuple,dict,l1 =[11,22,33,[44,55]] 非容器類的數據類型;str,int,bool.s1 = '[11,22,33]' 字典的key必須是不可變的數據類型,是惟一的 hash算法: 字典的鍵經過hash錶轉換成數字,採用二分查找查詢數字。 字典的value能夠是任意數據類型。 字典的查詢速度很是快,存儲的大量的關係型數據。 字典在python3.5包含3.5以前都是無序,但3.6以後是有序的 。
鍵惟一:git
dic = { 'name' = 'alex'
'name'='Wusir' } print(dic) 字典的鍵必須是不可變得可哈希的數據類型: dic = { 'name' : 'alex' [1,2,3] : 'values', } print(dic) #報錯 鍵必須是不可變的
字典的增刪改查:算法
增 1. 有則覆蓋,無則添加
dic = {'name':'老男孩','age':56,'hobby':'women'} dic['sex'] = 'LaddyBoy'
print(dic) # (在後面追加)
dic['name'] = 'Alex'
print(dic) 有則覆蓋,沒有就添加 {'name': 'Alex', 'age': 56, 'hobby': 'women'}
2.setdefault有則不變,無則添加
dic = {'name':'老男孩','age':56,'hobby':'women'} setdefault('sex') print(dic) 有鍵沒有值(None)不報錯 dic.setdefault('sex','Laddboy') print(dic) dic.setdefault('name','alex') print(dic) 有則不變,無則添加 {'name': '老男孩', 'age': 56, 'hobby': 'women'}
刪 1,POP 按鍵刪 有返回值,返回的是鍵對應的值
dic = {'name':'老男孩','age':56,'hobby':'women'} print(dic.pop('age')) #(56)有返回值,返回的是鍵對應的值
print(dic.pop('age1','沒有此鍵...'))
2.clear() 清空字典
dic = {'name':'老男孩','age':56,'hobby':'women'} dic,clear print(dic)
3.popitem 隨機刪除,有返回值,返回值爲元組,裏面是刪除的鍵值對
dic = {'name':'老男孩','age':56,'hobby':'women'} print(dic.popitem()) #隨機刪除,有返回值,返回值爲元組,裏面是刪除的鍵值對
print(dic)
4.del
1,刪除整個字典(在內存級別刪除)
dic = {'name':'老男孩','age':56,'hobby':'women'} del dic
2.按照鍵刪除鍵值對
dic = {'name':'老男孩','age':56,'hobby':'women'} del dic['name'] print(dic)
改 1.有則覆蓋,沒有就添加
dic = {'name':'老男孩','age':56,'hobby':'women'} dic['name'] = 'Alex' #有則覆蓋,沒有就添加
print(dic)
2.update兩個字典的更新
dic = {'name':'jin','age':18,'sex':'male'} dic2 = {'name':'alex','weight':75} dic2.update(dic)#將dic裏面的全部鍵值對覆蓋添加到dic2中,dic不變
print(dic) #{'name':'jin','age':'18','sex':'male'}
print(dic2)#{'name':'jin','weight':'75','age':'18','sex':'male'}
查 1.利用鍵去查(無此鍵報錯)
dic = {'name':'老男孩','age':56,'hobby':'women'} dic['name'] print(dic['name']) #(老男孩)
2.get (無此鍵默認返回None,可設置返回值)m
dic = {'name':'老男孩','age':56,'hobby':'women'} dic.get('name') print(dic.get('name')) print(dic.get('name1')) print(dic.get('name1','sb沒有此鍵'))
3.for循環查詢
dic = {'name':'老男孩','age':56,'hobby':'women'} dic.keys(), dic.values(), dic.items() #相似於list但不是list的類型,沒有索引。可遍歷。
print(dic.keys(),type(dic.keys())) for key in dic.keys(): print(key) l_key = list(dic.keys()) print(l_key) for value in dic.values(): print(value) l_value = list(dic.values()) print(l_value) print(dic.items()) k,v = ('name', '老男孩') for k,v in dic.items(): # [('name', '老男孩'), ('age', 56), ('hobby', 'women')]
print(k,v)
分別賦值概念 a, b = 1, 2 a, b = ('alex', '34') a, b = ['alex', '34'] 有 以下 a = 1 b = 3,用一行代碼將a b值互換。 a = 1 b = 3 a, b = b, a print(dic.items()) for i in [22,33,44]: print(i) for i in [(11,22),(33,44),(55,66)]: print(i)
字典的嵌套
dic = { 'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': { 'name': '反面教材', 'age': 25, 'hobby_list': ['抽菸', '喝酒', '燙頭'], } } 1,給dic添加一個鍵值對,學校:老男孩 dic['學校'] = '老男孩'
print(dic) #{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽菸', '喝酒', '燙頭']}, '學校': '老男孩'}
2,將status對應的值改爲True dic['status'] = True print(dic) {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': True, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽菸', '喝酒', '燙頭']}} 3,給name_list對應的列表追加一個元素:平平 print(dic['name_list']) dic['name_list'].append('平平') print(dic) ['碗蓉', '俊俊', '爽妹'] {'name_list': ['碗蓉', '俊俊', '爽妹', '平平'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽菸', '喝酒', '燙頭']}} 4,給personal_msg對應的字典添加一個鍵值對sex:男 dic2 = dic['personal_msg'] dic2['sex'] = '男'
print(dic) dic['personal_msg']['sex'] = '男'
print(dic) {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽菸', '喝酒', '燙頭'], 'sex': '男'}} 5,將hobby_list 對應的列表中的燙頭改爲唱歌。 dic['personal_msg']['hobby_list'][-1] = '唱歌'
print(dic) {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽菸', '喝酒', '唱歌']}}
練習題:app
一、有字符串"k:1|k1:2|k2:3|k3:4" 處理成字典 {'k':1,'k1':2....}
li = 'k:1|k1:2|k2:3|k3:4'.split('|') dic = {} for i in li: i = i.split(':') dic.setdefault(i[0],int(i[1])) print(dic)
2、元素分類 有以下值li= [11,22,33,44,55,66,77,88,99,90],將全部大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。 即: {'k1': 大於66的全部值列表, 'k2': 小於66的全部值列表}
dic = {'k1': [], 'k2': []} li= [11,22,33,44,55,66,77,88,99,90] for i in li: if i <66: # # dic.setdefault('k2',[]).append(i)
dic['k2'].append(i) elif i >66: # else: # dic.setdefault('k1',[]).append(i)
dic['k1'].append(i) print(dic)
3、輸出商品列表,用戶輸入序號,顯示用戶選中的商品 商品 li = ["手機", "電腦", '鼠標墊', '遊艇'] 要求:1:頁面顯示 序號 + 商品名稱,如: 1 手機 2 電腦 2: 用戶輸入選擇的商品序號,而後打印商品名稱 3:若是用戶輸入的商品序號有誤,則提示輸入有誤,並從新輸入。 4:用戶輸入Q或者q,退出程序。
li = ["手機", "電腦", '鼠標墊', '遊艇'] while True: for i in range(len(li)): print('{}\t{}'.format(i + 1, li[i])) msg = input("請輸入商品序號:(退出:Q\q)").strip() # 1a
if msg.upper() == 'Q': print("歡迎使用!") # 加一個購買的商品展現
break
elif msg.isdigit(): msg = int(msg) if 0 < msg <= len(li): print("您選擇的商品是:%s" % li[msg-1]) else: print("您選擇的商品序號有誤,請從新輸入!") else: print("您選擇的商品序號中包含非數字字符,請從新輸入!")