python筆記(7)


python標準程式庫
pytohn的主要訴求之一,就是他有“batteries included”,是一種大型的標準模組庫,可執行許多實用的工作,並且被分開,以免讓核心語言過於肥大。

  • 使用setdefault()和defaultdict()處理缺失的鍵
    函數setdefault()類似get(),當鍵不存在時它會在字典中添加一項:讀取字典中不存在的鍵的值會拋出異常。使用字典函數get()返回一個預設值會避免異常發生。
    periodic_table = {'Hydrogen': 1, 'Helium': 2}
    
    如果鍵不在字典中,新的預設值會被添加進去:
    carbon = periodic_table.setdefault('Carbon', 12) 
    periodic_table {'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}
    
    如果試圖把一個不同的預設值賦給已經存在的鍵,不回改變原來的值,仍將返回初始值:
helium = periodic_table.setdefault('Helium', 947) 
 periodic_table {'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}

defaultdict()也有同樣的用法,但是在字典創建的時候,對每個新的鍵都會指定預設值。它的參數時一個函數,下面的栗子,把函數int()作為參數傳入,會按照int()調用,返回整數0:

from collections import defaultdict
periodic_tab = defaultdict(int)
periodic_tab['Hycds'] = 1 
periodic_tab['Lead']
periodic_tab
defaultdict(int, {'Heklc': 0, 'Hycds': 1, 'Lead': 0})

任何缺失的值都將被賦值為整數0:
函數defaultdict()的參數是一個函數,它返回賦給缺失鍵的值,下面的栗子中no_idea()在需要時被執行,返回一個值:

from collections import defaultdict 
def no_idea():
    return 'Hub'  
bestity = defaultdict(no_idea)
bestity['A'] = 'nearjkl' 
bestity['B'] = 'jvkefk' 
bestity['A'] 
'nearjkl'
bestity['B'] 
'jvkefk'
bestity['C'] 
'Hub'

同樣可以使用函數int(),list()或者dict()返回默認的值:int()返回0,list()返回空列表([ ]),dict()返回空字典({ })。如果你刪掉該函數參數,新建的初始值會被設置為None。
也可以使用lambda來定義我們的預設值:

bestiary = defaultdict(lambda: 'Huh?')
bestity['C'] 
'HHub'

使用int是一種定義計數器的方式:

from collections  import  defaultdict 
food_counter = defaultdict(int)
for food in ['spam','spam','eggs','spam']:
    food_counter[food]+=1
for food,count in food_counter.items():
    print(food,count)

結果:
spam 3
eggs 1
上面的栗子中,如果 food_counter 已經是一個普通的字典而不是 defaultdict 預設字典, 那每次試圖自增字典元素 food_counter[food] 值時,Python 會拋出一個異常,因為我們沒 有對它進行初始化。在普通字典中,需要做額外的工作,如下所示:

dict_counter = {}
for food in ['spam','spam','eggs','spam']:
    ...:     if not  food in dict_counter:
    ...:         dict_counter[food] = 0
    ...:     dict_counter[food] += 1   
for food,count in dict_counter.items():
    ...:     print(food,count)

結果:
spam 3
eggs 1
在上面的栗子中,我們先創建一個空的字典,然後判斷鍵時候在字典中,如果不在,設置鍵值為0,如果在將鍵值加1(肯定事先都不在)。最後遍歷字典。

python從頭開始






Related Posts

循環神經網路 RNN

循環神經網路 RNN

如何使用 Markdown 撰寫文章?

如何使用 Markdown 撰寫文章?

Medium 爬蟲進化史

Medium 爬蟲進化史

只是看看 JSON 檔案格式

只是看看 JSON 檔案格式

CSS 生成藝術初探與 css-doodle 簡介

CSS 生成藝術初探與 css-doodle 簡介

七天學會 swift - NSPredicate Day4

七天學會 swift - NSPredicate Day4



Comments