1. 程式人生 > >Python for Data Analysis (8)

Python for Data Analysis (8)

字典

#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'