您好,登錄后才能下訂單哦!
????????????????????????????????????????????????????Python入門之字典
一、什么是字典
1、字典的實現原理
? ? ?字典的實現原理和差字典是類似的。當我們在字典中查找某個字時,一種辦法是從字典的第一頁開始往后翻,
直到找到我們要查找的字為止。這種辦法就是在列表中查找元素的方法,其缺點:字典中的字數越多查找的效率
越低。第二種方法是先在字典的索引表里(比如部首表)查找這個字對應的頁碼,然后直接到這個字對應的頁,
其優點是:查找效率不會隨著字典中字數的增加而降低,無論查找哪個字,查找速度非常快。
2、字典的特點
a)? 字典中的所有元素都是一個key-value時,通過指定的key總能映射到唯一確定的value。字典中不可以存在重復的,
但是可以存在重復的value。
b) 字典中的元素是無序的。順序不重要重要的是key和value的映射關系。
c)? 字典中的key必須是不可變對象。存取字典中的key-value對時,系統會調用內置函數hash根據指定key計算出value
存儲位置,也就是哈希值。對于指定的key,為了保證每次計算出的哈希值都是相同的,要求key必須是不可變對象。也就是說,
只有不可變對象才存在哈希值。
d)? 字典可以根據需要動態地伸縮。系統會根據需要動態分配和回收內存,因此在使用前無須預先聲明字典的容量。
e)? 字典會浪費較大的內存,與列表相比是用空間換取查詢時間。
二、為什么需要字典
例如:電話簿中存儲了姓名和電話號碼:
? ? 張三? 111111111
? ? 李四? 222222222
? ? 王五? 333333333
? ? 趙六? 444444444
# 姓名
names = ['張三','李四','王五','趙六']
# 電話號碼
numbers = ['111111111','222222222','333333333','444444444']
print(numbers[names.index('張三')])?#?111111111 for?i,n?in?zip(names,numbers): ????print(i,n) #或者使用zip進行并行遍歷 張三?111111111 李四?222222222 王五?333333333 趙六?444444444
最好是能把姓名和電話號碼全部存儲在一個和腳phonebook的數據結構中,就能直接獲得其對應的電話號碼。
phonebook?=?{'張三':'111111111','李四':'222222222','王五':'333333333','趙六':'444444444'} print(phonebook['張三'])?#111111111
三、字典的創建
1、使用花括號{}的方式
d1?=?{'zhangsan':18,'lisi':19,'wangwu':20} print(d1)?#?{'zhangsan':?18,?'lisi':?19,?'wangwu':?20} #空字典創建 d1?=?{} print(d1)?#?{}
2、使用內置函數dict()
#傳遞字典參數 d2?=?dict({'zhangsan':18,'lisi':19,'wangwu':20}) print(d2)?#?{'zhangsan':?18,?'lisi':?19,?'wangwu':?20} #傳遞帶元組的列表 d2?=?dict([('zhangsan',18),('lisi',19),('wangwu',20)]) print(d2)?#?{'zhangsan':?18,?'lisi':?19,?'wangwu':?20} #傳遞zip迭代對象 d2?=?dict(zip(['zhangsan','lisi','wangwu'],(18,19,20))) print(d2)?#?{'zhangsan':?18,?'lisi':?19,?'wangwu':?20}
四、字典的增刪改查
1、查操作
#使用[]的方法傳遞索引 d1?=?dict([('name','zhangsan'),('age',18)]) print(d1['name']) print(d1['age']) #get方法 print(d1.get('name'))?#?zhangsan print(d1.get('age'))??#?18 print(d1.get('abc','NONE'))?#?get允許我們自定義返回值,如果不存在對應值或索引時
2、增操作
d1['hobby']?=?'games'??#增加一個不存在的key-value對 d1.update([('wang',17),('li',16)])??#?使用update方法,一次增加多個key-value對 d1.update({'tianqi':'19'}) d1.update(zhangsan1?=?18) print(d1)??#?{'name':?'zhangsan',?'age':?18,?'hobby':?'games',?'wang':?17,?'li':?16,?'tianqi':?'19',?'zhangsan1':?18}
3、改操作
d1['age']?=?'27' d1.update(wang?=?22,tianqi?=?23) d1.update({'name':'zhangsan1'}) d1.update(hobby?=?'read') d1.update([('tianqi',23),('zhangsan',25)]) print(d1)??#?{'name':?'zhangsan1',?'age':?'27',?'hobby':?'read',?'wang':?22,?'li':?16,?'tianqi':?23,?'zhangsan1':?18,?'zhangsan':?25}
4、刪操作
d1?=?{'name':?'zhangsan1',?'age':?'27',?'hobby2':?'games',?'hobby1':?'read',?'zhangsan':?25} d1.pop('name')??#?刪除一個指定key d1.popitem()??#隨機刪除一個key del(d1['age'])?#?刪除一個指定key print(d1)??#?{'hobby2':?'games',?'hobby1':?'read'} d1.clear()?#?清空列表 print(d1)?#?{}
五、字典的視圖
1、調用keys,values,iteams方法打印字典視圖
print(d1.keys(),type(d1.keys()))??#?dict_keys(['name',?'age',?'hobby2',?'hobby1',?'zhangsan'])?<class?'dict_keys'>?打印字典的key print(d1.values(),type(d1.values()))?#?dict_values(['zhangsan1',?'27',?'games',?'read',?25])?<class?'dict_values'>?打印字典的values print(d1.items(),type(d1.items()))?#?dict_items([('name',?'zhangsan1'),?('age',?'27'),?('hobby2',?'games'),?('hobby1',?'read'),?('zhangsan',?25)])?<class?'dict_items'>?#?打印字典的key-value
六、為字典設置默認值
1、使用dict.setdefault()方法為字典設置默認值
#?為字典設置默認值 d1?=?dict([('name','zhangsan'),('age',18),('hobby','games')]) print(d1.setdefault('name'))?#?zhangsan?當key-value存在時,返回對應值 print(d1.setdefault('score',90))?#?90??#?當key-value不存在時,賦予默認值,并添加到字典中 print(d1)?#?{'name':?'zhangsan',?'age':?18,?'hobby':?'games',?'score':?90}
七、借助字典創建格式化字符串
d1?=?dict([('name','zhangsan'),('age',18),('hobby','games')]) #?使用%作為占位符 print('名字是:%s,年齡是:%i,愛好是:%s'?%?(d1['name'],d1['age'],d1['hobby'])) print('名字是:%(name)s,年齡是:%(age)i,愛好是:%(hobby)s'?%?d1) #?使用{}作為占位符 print('名字是:{},年齡是:{},愛好是:{}'?.format(d1['name'],d1['age'],d1['hobby'])) print('名字是:{name},年齡是:{age},愛好是:{hobby}'?.format_map(d1))
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。