1. 程式人生 > >day9(Hash、字典)

day9(Hash、字典)

序列 報錯 多級 空間 log 速度 多個 md5加密 翻譯

一、Hash

簡介:

  Hash,一般被翻譯成“散列”,也有直接音譯"哈希"的,就是把任意長度的輸入,通過哈希算法,變換成固定長度的輸出,輸出的結果就叫做哈希值,這是一種壓縮映射,也就是說一般哈希值的空間要小於輸入空間,不同的輸入但是得出的哈希值可能是相同的,所以不可能從哈希值來確定輸入值,簡單來說哈希就是將任意長度壓縮為固定長度的函數。

特征:

  Hash的值計算過程中是依據輸入值的一些特性計算的,這就要求Hash值必須固定,因此被Hash的值必須是不可變的,如字符串、數字、元祖。不可為列表

用途:

  1. 文件簽名
  2. MD5加密
  3. 密碼驗證

二、字典

簡介:

  字典是一種key -value的數據類型,通過key的值來獲取value

基本語法:

  

info = { #大括號
    a:1,#用冒號隔斷key  value
    b:2,
    c:3
}
print(info)

特性:

  1. key -value 結構
  2. key必須可哈希、且必須為不可變數據類型、必須唯一
  3. 可存任意多個值、可修改、可不唯一
  4. 無序
  5. 查找速度快

基本操作:

增加

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、字典)