Python for Data Analysis (8)
阿新 • • 發佈:2019-01-02
字典
#update方法,一個字典可以被合併到另一個字典中去:
d1={1:'a',2:'b'}
d1.update({3:'c',4:'d'})
d1
dict(zip(range(4),reversed(range(5))))
d1.get(1)
預設值!!
1.
一個常見的邏輯:
if key in some_dict:
value=some_dict[key]
else:
value=default_value
#可以簡化成
value=some_dict.get(key,default_value)
2.
words={'apple' ,'bat','bar','atom','book','momo'}
by_letter={}
for word in words:
letter=word[0]
if letter not in by_letter:
by_letter[letter]=[word]
else:
by_letter[letter].append(word)
by_letter
{'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book'], 'm': ['momo']}
#利用setdefault方法,讓上面的if-else塊可以寫成:
by_letter.setdefault(letter,[]).append(word)
#還有簡化方法collection模組中的一個defaultdict的類
from collections import defaultdict
by_letter=defaultdict(list)
for word in words:
by_letter[word[0]].append(word)
by_letter
defaultdict(list, {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book'], 'm': ['momo']})
defaultdict的初始化器只需要一個可呼叫物件(例如各種函式),並不需要明確的型別。因此,如果要將預設值設定為4,只需要傳入一個能夠返回4的函式即可:
counts=defaultdict(lambda:4)
counts
defaultdict(<function __main__.<lambda>>, {})
字典的雜湊性
雖然字典的值是可以是任何Python物件,但鍵必須是不可變物件,這裡描述為可雜湊性,可以用hash函式來驗證
hash('string')
-9167918882415130555
hash([13,3])#列表是可以變的,如果一定要用列表,就轉變它為元組
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-20-d7b46a358c61> in <module>()
----> 1 hash([13,3])#列表是可以變的,如果一定要用列表,就轉變它為元組
TypeError: unhashable type: 'list'