Python入門之字典
python
1、什麼是字典
數據結構
一、字典的實現原理ide
字典的實現原理和差字典是相似的。當咱們在字典中查找某個字時,一種辦法是從字典的第一頁開始日後翻,函數
直到找到咱們要查找的字爲止。這種辦法就是在列表中查找元素的方法,其缺點:字典中的字數越多查找的效率spa
越低。第二種方法是先在字典的索引表裏(好比部首表)查找這個字對應的頁碼,而後直接到這個字對應的頁,orm
其優勢是:查找效率不會隨着字典中字數的增長而下降,不管查找哪一個字,查找速度很是快。對象
二、字典的特色索引
a) 字典中的全部元素都是一個key-value時,經過指定的key總能映射到惟一肯定的value。字典中不能夠存在重複的,ip
可是能夠存在重複的value。內存
b) 字典中的元素是無序的。順序不重要重要的是key和value的映射關係。
c) 字典中的key必須是不可變對象。存取字典中的key-value對時,系統會調用內置函數hash根據指定key計算出value
存儲位置,也就是哈希值。對於指定的key,爲了保證每次計算出的哈希值都是相同的,要求key必須是不可變對象。也就是說,
只有不可變對象才存在哈希值。
d) 字典能夠根據須要動態地伸縮。系統會根據須要動態分配和回收內存,所以在使用前無須預先聲明字典的容量。
e) 字典會浪費較大的內存,與列表相比是用空間換取查詢時間。
2、爲何須要字典
例如:電話簿中存儲了姓名和電話號碼:
張三 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
3、字典的建立
一、使用花括號{}的方式
d1 = {'zhangsan':18,'lisi':19,'wangwu':20} print(d1) # {'zhangsan': 18, 'lisi': 19, 'wangwu': 20} #空字典建立 d1 = {} print(d1) # {}
二、使用內置函數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}
4、字典的增刪改查
一、查操做
#使用[]的方法傳遞索引 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容許咱們自定義返回值,若是不存在對應值或索引時
二、增操做
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}
三、改操做
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}
四、刪操做
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) # {}
5、字典的視圖
一、調用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
6、爲字典設置默認值
一、使用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}
7、藉助字典建立格式化字符串
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))