假設要做的事情是處理一份文件,建立一個 key 至 list(str) 的 dict,則當出現一個新的 key 時,我們得創造一個新的 list:
index = {} # Create an empty dict if not key in index: index[key] = [] index[key].append(value)
首先可以用以下方式來簡化:
values = index.get(key, []) values.append(value) index[key] = values
以上方法雖然少了一個 if,但是仍然得搜尋 key 兩次。利用 setdefault 或 collection.defaultdict 函數即可只搜尋 key 一次:
# Using setdefault: index.setdefault(key, []).append(value) # Using collections.defaultdict: import collections index = collections.defaultdict(list) index[key].append(value)
當 key 不存在時,defaultdict 會呼叫 default_factory 中的 __missing__ 函數,因此當我們自己實作 dict 相關的類別時便可以利用此函數來處理不存在的 key。
不能改的 dict:MappingProxyType
以下為一個例子:
from types import MappingProxyType d = {1: 'A'} d_proxy = MappingProxyType(d)
沒有留言:
張貼留言