字典是python中惟一的映射類型,採用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,因此字典是無序存儲的,且key必須是可哈希的。可哈希表示key必須是不可變類型,如:數字、字符串、元組。python
字典(dictionary)是除列表之外python之中最靈活的內置數據結構類型。列表是有序的對象結合,字典是無序的對象集合。二者之間的區別在於:字典當中的元素是經過鍵來存取的,而不是經過偏移存取。git
第一種建立方法api
1 dic1={"name":"xxx","age":22}
第二種建立方法,使用dict()類(工廠函數)建立,dict裏面傳遞的參數能夠是字典,列表或者其餘可迭代的對象數組
1 dic1=dict((("name","xxx"),)) 2 dic1=dict([["name","xxx"]]) 3 a=[1,2,3] 4 b=["a","b","c"] 5 dic1=dict(zip(a,b))
增數據結構
1 dic1={"name":"xxx","age":22} 2 dic1["hobby"]="girl" 3 dic2=dic1.setdefault("age",18) #使用setdefault方法假如字典中有該key,則返回原來的value並不修改value 4 dic2=dic1.setdefault("hobby","girl")#假如字典中沒有該key,則添加該key,value對並返回新增長的value
查函數
1 dic2={"name":"xxx","age":22} 2 dic2["name"] #經過key獲取value 3 print(dic2.keys())#返回全部的key 4 print(dic2.values())#返回全部的value 5 print(dic2.items())#返回全部的item 6 print(dic2.get("name"))#經過get方法獲取某個key對應的value
改spa
1 dic3={"name":"xxx","age":22} 2 dic4={"age":33,"hobby":"girl"} 3 dic3.update(dic4)#假如dic4中的key在dic3中存在,那麼覆蓋dit3中的value,不然添加這個鍵值對到dic3中 4 dic3["name"]="alex2"#修改字典中對應key的value 5 dic3["name"]="abc"#經過key對字典進行修改
刪code
1 dic5={"name":"xxx","age":22} 2 dic5.clear()#清空該字典內容 3 del dic5['name']#經過key刪除某個鍵值對 4 print(dic5.popitem())#popitem將隨機刪除字典中的一個item並將該item返回 5 print(dic5.pop("name"))#刪除指定key對應的鍵值對,並返回該鍵對應的value 6 del dic5#刪除該字典
其餘操做及方法orm
dict.fromkeys方法也能夠建立字典,建立字典方式以下:對象
1 dic6=dict.fromkeys(['host1','host2','host3'],'test') 2 print(dic6)#{'host3': 'test', 'host1': 'test', 'host2': 'test'} 3 dic6['host2']='abc' 4 print(dic6)
可是經過這種方式建立的字典的value初始都是同一個值,假以下面這種狀況就會出現異常:
1 dic6=dict.fromkeys(['host1','host2','host3'],['test1','tets2']) 2 print(dic6) 3 {'host2': ['test1', 'tets2'], 'host3': ['test1', 'tets2'], 'host1': ['test1', 'tets2']} 4 dic6['host2'][1]='test3' 5 print(dic6) 6 {'host3': ['test1', 'test3'], 'host2': ['test1', 'test3'], 'host1': ['test1', 'test3']}
說明這裏面的value相似於淺拷貝同樣的效果,修改value中的列表的內容的時候,全部value都修改了。
dict.copy()方法是對字典的淺拷貝,返回一個和以前字典有相同內容的新字典
dict沒有內置sort方法,要對字典進行排序須要使用sorted(dict)方式,默認是根據key來進行排序,也能夠根據value或者自定義方式來排序。如sorted(dict.values())就是根據value進行排序。
集合定義:把不一樣的可hash的元素放在一塊兒就是一個集合。
集合的特色:沒有重複值,值必須是可hash的。
集合的聲明:a=set(「序列」) 裏面的序列能夠是一個字符串,能夠是一個列表,也能夠是一個字典(是字典的話,只能存儲字典的key)
不可變集合:經過frozenset(「序列」)能夠建立不可變集合,不可變集合和集合之間的關係和list和tuple之間的關係差很少
1 a = set([1, 2, 3, 4, 5]) a.add(6) # 沒有返回值,添加一個元素,若是添加的元素在set裏面的話,set的內容將不會被改變 2 3 a.update("hello") # Update a set with the union of itself and others將一個序列轉換成set並取並集給原來的set 4 5 a.clear() # 清空集合的內容 6 7 a.remove(4) # 刪除集合裏面指定的key 8 9 a.pop() # 隨機刪除集合中的一個key並返回這個key
1 a=set([1,2,3,4,5]) 2 3 b=set([4,5,6,7,8]) 4 5 求交集:intersection 6 7 print(a.intersection(b)) 8 9 print(a&b) 10 11 求並集:union 12 13 print(a.union(b)) 14 15 print(a|b) 16 17 求差集:difference 18 19 print(a.difference(b)) 20 21 print(b-a) 22 23 求對稱差集 反向交集:symmetric_difference 24 25 print(a.symmetric_difference(b)) 26 27 print(a^b) 28 29 print((a | b)-(a&b)) # 使用並集減去交集也能獲得相同結果 集合之間能夠有-運算,可是沒有+運算 30 31 求父集 超集:issuperset父集 issubset子集 32 33 print(a.issuperset(b)) # a>=b 34 35 print(a>=b) 36 37 print(a.issubset(b)) # a<=b 38 39 print(a<=b) 40 41 print(a=>b) # a包含b 42 43 print(a<=b) # b包含a 44 45 print(a==b) # a和b等價
字符串處理方法比較多,下面經過分類來進行解釋字符串的一些方法:
字母處理方法:
所有大寫:str.upper()
所有小寫:str.lower()
大小寫互換:str.swapcase()
整個字符串首字母大寫,其他小寫:str.capitalize()
每一個單詞的首字母大寫:str.title()
格式化相關
獲取固定長度,右對齊,左邊不夠用默認用空格補齊,可自行在第二個參數中設置補充字符:str.rjust(width,"*") 獲取固定長度,左對齊,右邊不夠用默認用空格補齊,可自行在第二個參數中設置補充字符:str.ljust(width,"*") 獲取固定長度,中間對齊,兩邊不夠用默認空格補齊,可自行在第二個參數中設置補充字符:str.center(width,"*") 獲取固定長度,右對齊,左邊不足用0補齊:str.zfill(20) 使用format格式化輸出,用{}包裹變量,(若是字符串中含有{}的話,左括號弄成{{,右括號弄成}}實現大括號轉義):str.format(變量名=值) 使用format_map格式化輸出,用{}包裹變量,(若是字符串中含有{}的話,左括號弄成{{,右括號弄成}}實現大括號轉義)和format區別是傳遞參數形式不同:str.format_map(dict)
字符串搜索相關
搜索指定字符串,沒有返回-1:str.find('t') 指定起始位置搜索:str.find('t',start) 指定起始及結束位置搜索:str.find('t',start,end) 從右邊開始查找:str.rfind('t') 上面全部方法均可用index代替,不一樣的是使用index查找不到會拋異常,而find返回-1 搜索到多少個指定字符串:str.count('t')
字符串替換相關
替換old爲new:str.replace('old','new') 替換指定次數的old爲new:str.replace('old','new',maxReplaceTimes)
字符串去空格及去指定字符
去兩邊空格,換行符,製表符等:str.strip() 去左空格,換行符,製表符等:str.lstrip() 去右空格,換行符,製表符等:str.rstrip() 去兩邊字符串:str.strip('d'),相應的也有lstrip,rstrip
按指定字符分割字符串爲數組:
默認按空格分隔,也可按照自定義分隔符分隔,第二個參數能夠指定最大分隔次數:str.split(' ',maxnum) 從右往左默認按空格分隔,也可按照自定義分隔符分隔,第二個參數能夠指定最大分隔次數:str.rsplit(' ',maxnum)
字符串判斷相關
是否以start開頭:str.startswith('start') 是否以end結尾:str.endswith('end') 是否全爲字母或數字:str.isalnum() 是否全字母:str.isalpha() 是否全數字:str.isdigit() 是否全小寫:str.islower() 是否全大寫:str.isupper()