可雜湊型別的定義
如果乙個物件是可雜湊的,那麼在這個物件的生命週期中,它的雜湊值是不變 的,而且這個物件需要實現 __hash__() 方法。另外可雜湊物件還要有 __qe__() 方法,這樣才能跟其他鍵做比較。如果兩個可雜湊物件是相等的,那麼它們的雜湊值一定是一樣的……
這是流暢的python中的原話。
# 一般情況下,使用者自己建立的變數都是可雜湊的
# str,bytes,數值型別如int float doubl等,都是可雜湊的
# frozenset因定義只能容納可雜湊型別,故也可雜湊
# 元組要看其中元素是否有不可雜湊的型別
# 例子如下
ff =(1
,2,(
3,4)
)f =(2
,3,[
1,4]
)hash
(f)# 報錯
fff =(1
,2,frozenset([
3,4]
))hash
(fff)
# 正常
字典setdefault
# 字典裡面,哎,說實話,書裡面舉的例子挺好的,不列舉了,把重要的說一下
a_dict.setdefault(key,
)if key not
in a_dict:
a_dict[key]=[
]# 兩種的功能是一樣的,所以可以看出,setdefault函式可以至少簡化一次搜尋
字典的變種ordereddict
# 如果想要字典的列印,和我們輸入的順序一樣,就要用到ordereddict
from collections import ordereddict
a_dict = ordereddict(
)a_dict[
"name"]=
"lhf"
a_dict[
"phone_num"]=
"1111"
a_dict[
"love"]=
"xyp"
字典的變種counter
from collections import counter
ct = collections.counter(
'abracadabra'
)# 計算這個單詞中各個字母的個數,並返回乙個字典
print
(ct)
# counter() 輸出結果
集合
集合的本質是許多唯一物件的聚類,可以用來去重
給定兩個集合 a 和 b
a | b 返 回的是它們的合集
a & b 得到的是交集
而 a - b 得到的是差集
合理地利用這些操作,不僅能夠讓**的行數變少,還能減少 python 程式的執行時間
本章最後的結論
dict 和 set 背後的雜湊表效率很高
對它的了解越深入,就越能理解為什麼被儲存的元素會呈現出不同的順序,以及已有的元素順序會發生變化的原因。
同時,速度是以犧牲空 間為代價而換來的。
(這篇部落格裡面有**進行比較。
《流暢的python》學習筆記(三)
字典是python的基石 除dict外,有其他好用的如defaultdict orderedict chainmap counter 屬於collections模組 字典提供了多種構造方法,比如 a dict one 1,two 2,three 3 b c dict zip one two thre...
《流暢的Python》讀書筆記(三)
country code my dict.setdefault key,使用 collections.defaultdict import collections index collections.defaultdict list index hunan changsha index defaul...
python自學 第三週
coding utf 8 from functools import reduce 處理序列中的每個元素,得到的結果是乙個 列表 迭代器 元素個數與位置和原來的一樣 map print list filter lambda p p age 18,p print list zip p s slice ...