2021年12月10日 星期五

Python:處理 dict 中不存在的 key

假設要做的事情是處理一份文件,建立一個 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 兩次。利用 setdefaultcollection.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)

沒有留言:

張貼留言