day9(Hash、字典)
阿新 • • 發佈:2018-03-10
序列 報錯 多級 空間 log 速度 多個 md5加密 翻譯
一、Hash
簡介:
Hash,一般被翻譯成“散列”,也有直接音譯"哈希"的,就是把任意長度的輸入,通過哈希算法,變換成固定長度的輸出,輸出的結果就叫做哈希值,這是一種壓縮映射,也就是說一般哈希值的空間要小於輸入空間,不同的輸入但是得出的哈希值可能是相同的,所以不可能從哈希值來確定輸入值,簡單來說哈希就是將任意長度壓縮為固定長度的函數。
特征:
Hash的值計算過程中是依據輸入值的一些特性計算的,這就要求Hash值必須固定,因此被Hash的值必須是不可變的,如字符串、數字、元祖。不可為列表
用途:
- 文件簽名
- MD5加密
- 密碼驗證
二、字典
簡介:
字典是一種key -value的數據類型,通過key的值來獲取value
基本語法:
info = { #大括號 ‘a‘:1,#用冒號隔斷key value ‘b‘:2, ‘c‘:3 } print(info)
特性:
- key -value 結構
- key必須可哈希、且必須為不可變數據類型、必須唯一
- 可存任意多個值、可修改、可不唯一
- 無序
- 查找速度快
基本操作:
增加
info = { #大括號 ‘a‘:1,#用冒號隔斷key 和 value ‘b‘:2, ‘c‘:3 } info[‘d‘] = [‘4‘,‘5‘] #可以增加列表 print(info)
# 結果 {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: [‘4‘, ‘5‘]}
刪除
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } info.pop("a")#刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。 print(info) #輸出 {‘b‘: 2, ‘c‘: 3} #del刪除 del info["a"] print(info) #輸出 {‘b‘: 2, ‘c‘: 3}
info.popitem() #隨機刪除key的值
print(info)
#輸出 {‘b‘: 2, ‘c‘: 3}
info.clear() #清空字典 print(info) #輸出 {}
修改
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } info[‘a‘] = 11 print(info) #結果{‘a‘: 11, ‘b‘: 2, ‘c‘: 3}
查找,查找有兩種方法分別是
in
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print("a" in info) #輸出 True info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print("x" in info) #輸出 False info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print (info[‘x‘]) #如果取得鍵字典裏面沒有就會報錯 #報錯
get
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print (info.get(‘a‘)) #輸出 1 info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print (info.get(‘a‘)) #如果取得鍵字典裏面沒有也不會報錯則會返回 None #輸出 None
兩種方法都可以滿足查找的要求,但是建議使用get因為get查找的值如果不存在不會報錯!
多級字典嵌套,字典裏可以套字典,一層一層這個意思
info = { ‘a‘:{ ‘A‘:1, ‘B‘:2 }, ‘b‘:2, ‘c‘:3 } print(info) #輸出 {‘a‘: {‘A‘: 1, ‘B‘: 2}, ‘b‘: 2, ‘c‘: 3}
values #以列表返回一個字典所有的值
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3} >>> info.values() dict_values([1, 2, 3])
keys#以列表返回一個字典所有的鍵
>>> info.keys() dict_keys([‘a‘, ‘b‘, ‘c‘])
setdefault #和get 方法類似, 如果鍵不存在於字典中,將會添加鍵並將值設為默認值。
>>> info.setdefault(‘xiaoze‘,‘baliya‘) ‘maliya‘ >>> info {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘xiaoze‘: ‘maliya‘}
update#把字典dict2的鍵/值對更新到dict裏。
>>> info {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘xiaoze‘: ‘baliya‘} >>> info_2 {‘A‘: 1, ‘b‘: 2, ‘c‘: [4, 5, 6]} >>> info.update(info_2) >>> info {‘a‘: 1, ‘b‘: 2, ‘c‘: [4, 5, 6], ‘xiaoze‘: ‘baliya‘, ‘A‘: 1}
items#以列表返回可遍歷的(鍵, 值) 元組數組。
>>> info.items() dict_items([(‘a‘, 1), (‘b‘, 2), (‘c‘, [4, 5, 6]), (‘xiaoze‘, ‘baliya‘), (‘A‘, 1)])
fromkeys#用於創建一個新字典,以序列seq中元素做字典的鍵,value為字典所有鍵對應的初始值
>>> dict.fromkeys([1,2,3],‘test‘) {1: ‘test‘, 2: ‘test‘, 3: ‘test‘}
循環
#方法一
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } for key in info: print(key,info[key]) #輸出 a 1 b 2 c 3
#方法二
for key,y in info.items(): print(key,y) #輸出 a 1 b 2 c 3
#使用第一種方法不是建議,第二種方法剛剛說過了是將字典轉換為列表然後在循環打印,這樣大大降低了效率!
day9(Hash、字典)