標籤:hub err 圖片 改變 產生 情況 -- info 一點
字典字典的增刪改查
字典的建立方式:
# 建立字典類型info = { ‘name‘:‘李白‘, ‘age‘:‘25‘, ‘sex‘:‘男‘}msg = { ‘user01‘:‘Longzeluola‘, ‘user02‘:‘xiaozemaliya‘, ‘user03‘:‘cangjingkong‘}
字典儲存資料的時候,採取的是key:value的形式,是一組無序的儲存。在需要的時候通過key就能夠快速的擷取value。
msg = { ‘user01‘:‘Longzeluola‘, ‘user02‘:‘xiaozemaliya‘, ‘user03‘:‘cangjingkong‘}print(msg[‘user01‘]) # Longzeluola
字典的值可以根據key值擷取並且變更。
msg = { ‘user01‘:‘Longzeluola‘, ‘user02‘:‘xiaozemaliya‘, ‘user03‘:‘cangjingkong‘}msg[‘user03‘] = ‘瀧澤蘿拉‘
結果:
{‘user01‘: ‘Longzeluola‘, ‘user02‘: ‘xiaozemaliya‘, ‘user03‘: ‘瀧澤蘿拉‘}
那麼字典中如果需要新添加資料的話,也可以通過設定key-value的形式來進行添加。
msg = { ‘user01‘:‘Longzeluola‘, ‘user02‘:‘xiaozemaliya‘, ‘user03‘:‘cangjingkong‘}msg[‘user04‘] = ‘MaLiCang‘print(msg)
結果:
{‘user01‘: ‘Longzeluola‘, ‘user02‘: ‘xiaozemaliya‘, ‘user03‘: ‘cangjingkong‘, ‘user04‘: ‘MaLiCang‘}
而如果需要刪除python中的資料,可以使用如下的三種方法:
msg = { ‘user01‘:‘Longzeluola‘, ‘user02‘:‘xiaozemaliya‘, ‘user03‘:‘cangjingkong‘}# 刪除字典方法一#del msg[‘user01‘] # {‘user02‘: ‘xiaozemaliya‘, ‘user03‘: ‘cangjingkong‘}# 刪除字典方法二#msg.pop(‘user01‘) # # {‘user02‘: ‘xiaozemaliya‘, ‘user03‘: ‘cangjingkong‘}# 刪除字典方法三msg.popitem() # {‘user01‘: ‘Longzeluola‘, ‘user02‘: ‘xiaozemaliya‘}
補充
在上面的一些操作中,我們基本實現了字典的增刪改查,但是在查的過程中,有一點是需要注意的,如上面的查詢方式dir[key]這種,如果key值並不存在於字典中,就會出現一個keyerror的錯誤,所以為了避免錯誤,我們通常情況下都不會使用這種方式來進行字典的key值尋找,而是通過下面的方法。
# 建立一個字典msg = { ‘user1101‘:‘Xiaozemaliya‘, ‘user1102‘:‘Wutentlan‘, ‘user1103‘:‘Cangjingkong‘}# 通過key值擷取value 使用get方式,存在key,那麼就返回對應的value,如果不存在key,那麼就返回Noneprint(msg.get(‘user1101‘)) # Xiaozemaliyaprint(msg.get(‘user1108‘)) # None
判斷一個key是否存在於一個字典中,可以使用in 運算子。
# 建立一個字典msg = { ‘user1101‘:‘Xiaozemaliya‘, ‘user1102‘:‘Wutentlan‘, ‘user1103‘:‘Cangjingkong‘}# 使用in檢測字典中是否存在指定的keyprint(‘user1101‘ in msg) # Trueprint(‘user1109‘ in msg) # False
上面是使用in運算子判斷key是否存在,需要注意的是,在python2.x 的版本中,判斷一個key是否存在於字典中,可以使用msg.has_key()的方式來進行判斷。
多級字典嵌套及操作
在字典中,一直以key-value的形式進行資料存放區,但是value的值除了是字串以外,還可以是其他類型的值。同時,在字典中,也可以繼續嵌套字典等資料。具體操作如下:
# 建立一個多級的字典av_catalog = { "歐美":{ "www.youporn.com": ["很多免費的,世界最大的","品質一般"], "www.pornhub.com": ["很多免費的,也很大","品質比yourporn高點"], "letmedothistoyou.com": ["多是自拍,高品質圖片很多","資源不多,更新慢"], "x-art.com":["品質很高,真的很高","全部收費,屌比請繞過"] }, "日韓":{ "tokyo-hot":["品質怎樣不清楚,個人已經不喜歡日韓範了","聽說是收費的"] }, "大陸":{ "1024":["全部免費,真好,好人一生平安","伺服器在國外,慢"] }}# 更改key值av_catalog[‘大陸‘][‘1024‘][1] = ‘可以在國內做一個鏡像‘print(av_catalog)
關於字典的補充說明
values 列印字典裡面的所有的值
msg = { ‘stu1101‘:‘XiaomingStudent‘, ‘stu1102‘:‘XiaohongStudent‘, ‘stu2201‘:‘XiaolvStudent‘, ‘stu3101‘:‘XiaoZhangStudent‘}# values() 方法 輸出字典中所有的值print(msg.values())
結果為:
dict_values([‘XiaomingStudent‘, ‘XiaohongStudent‘, ‘XiaolvStudent‘, ‘XiaoZhangStudent‘])
keys 列印所有的key
msg = { ‘stu1101‘:‘XiaomingStudent‘, ‘stu1102‘:‘XiaohongStudent‘, ‘stu2201‘:‘XiaolvStudent‘, ‘stu3101‘:‘XiaoZhangStudent‘}# keys 列印所有的keyprint(msg.keys())
結果為:
dict_keys([‘stu1101‘, ‘stu1102‘, ‘stu2201‘, ‘stu3101‘])
setdefault
設定新的key:value ,如果設定的key在字典中存在,那麼就會把之前的key以及value返回,新設定的就會失效,如果沒有就把設定的key:value添加到字典中去。
msg = { ‘stu1101‘:‘XiaomingStudent‘, ‘stu1102‘:‘XiaohongStudent‘, ‘stu2201‘:‘XiaolvStudent‘, ‘stu3101‘:‘XiaoZhangStudent‘}# 使用setdefault方法設定key:valuemsg.setdefault(‘stu3101‘,‘YanYanStudent‘) # 此時3101key 已經存在,並不會新增的內容所影響print(msg)msg.setdefault(‘stu3102‘,‘LuLuStudent‘) # 此時新增加的key 3102 添加成功print(msg)
update 更新合并
使用update方法,可以將兩個字典合并,並且如果字典中存在重複的內容,會產生覆蓋,如果內容不重複,就會被合并到一個字典中。
msg = { ‘stu1101‘:‘XiaomingStudent‘, ‘stu1102‘:‘XiaohongStudent‘, ‘stu2201‘:‘XiaolvStudent‘, ‘stu3101‘:‘XiaoZhangStudent‘}test_info = { ‘T1101‘:‘YanYanTeacher‘, ‘T1102‘:‘LiBai‘, ‘stu2201‘:‘JingjingStudent‘}msg.update(test_info)print(msg)
輸出結果為:
{‘stu1101‘: ‘XiaomingStudent‘, ‘stu1102‘: ‘XiaohongStudent‘, ‘stu2201‘: ‘JingjingStudent‘, ‘stu3101‘: ‘XiaoZhangStudent‘, ‘T1101‘: ‘YanYanTeacher‘, ‘T1102‘: ‘LiBai‘}
items 把一個列錶轉為一個元組
msg = { ‘stu1101‘:‘XiaomingStudent‘, ‘stu1102‘:‘XiaohongStudent‘, ‘stu2201‘:‘XiaolvStudent‘, ‘stu3101‘:‘XiaoZhangStudent‘}print(msg.items())
輸出結果為:
dict_items([(‘stu1101‘, ‘XiaomingStudent‘), (‘stu1102‘, ‘XiaohongStudent‘), (‘stu2201‘, ‘XiaolvStudent‘), (‘stu3101‘, ‘XiaoZhangStudent‘)])
fromkeys 建立一個初始化列表
test_dir = dict.fromkeys([‘stu01‘,‘stu02‘,‘stu03‘],[1,{‘name‘:‘YanYanStudent‘}])print(test_dir)
輸出的結果為:
{‘stu01‘: [1, {‘name‘: ‘YanYanStudent‘}], ‘stu02‘: [1, {‘name‘: ‘YanYanStudent‘}], ‘stu03‘: [1, {‘name‘: ‘YanYanStudent‘}]}
此時通過dict.fromkeys方法,就建立出了一個新的字典,但是在這個字典中存在一個容易錯的地方,如下:
test_dir = dict.fromkeys([‘stu01‘,‘stu02‘,‘stu03‘],[1,{‘name‘:‘YanYanStudent‘}])# 嘗試著更改這個字典中的內容通過key值test_dir[‘stu01‘][1][‘name‘] = ‘YanYanTeacher‘print(test_dir)
我們在代碼中更改了其中的一個key的值,結果輸出卻為:
{‘stu01‘: [1, {‘name‘: ‘YanYanTeacher‘}], ‘stu02‘: [1, {‘name‘: ‘YanYanTeacher‘}], ‘stu03‘: [1, {‘name‘: ‘YanYanTeacher‘}]}
此時我們發現所有的key對應的value都被改變了。而這也是我們在使用這個fromkeys方法的時候需要注意的點。
字典的迴圈輸出
將字典中key和value迴圈輸出,有以下的兩種方式:
# 建立一個字典msg = { ‘T1101‘:‘YanYanTeacher‘, ‘T1201‘:‘LuLuTeacher‘, ‘T1301‘:‘JingJingTeacher‘}# 迴圈輸出字典 -- 第一種方法for i in msg: print(i,msg[i])# 迴圈輸出字典 -- 第二種方法for i,v in msg.items(): print(i,v)
上面兩種迴圈輸出資料行表的方式輸出的結果是一樣的,但是較為推薦使用第一種,因為第一種方式的執行效率要高於第二種,因為第一種是直接根據key值取出value,而第二種方式則是要多出一步將字典轉換為列表的步驟,所以效率相對來講比較低。
python 字典相關操作