Effective PYTHON 2rd
在使用dictionary時,若key值不存在時會產生KeyError,我們有四種方式可以處理。
counters = {
'key1': 1,
'key2': 2
}
key = 'key0'
#法一:
#先檢查key值是否存在
if key in counters:
count = counters[key]
else:
count = 0
counters[key] = count + 1
#法二:
#用try/except處理KeyError
try:
count = counters[key]
except KeyError:
count = 0
counters[key] = count+1
#法三:
#使用get
count = counters.get(key, 0)
counters[key] = count + 1
#法四:
#使用setdefault
counters.setdefault(key, 0)
counters[key] += 1
get會把第一個引數當作key回傳對應的value,若key不存在不會丟出KeyError而是會回傳第一個引數的值,在此例中就會回傳0。若是沒有第二個引數會回傳None,在此例中應該比較推薦用get的用法。
而setdefault則會把value直接用第二個引數修改。通常是適合用在value是container的狀況,但書中建議這種情況可能要考慮用defaultdic來代替一般的dictionary。
key = 'key0'
votes = {
'key1': ['Bob', 'Alice'],
'key2': ['Coco']
}
names = votes.get(key)
if names is None:
votes[key] = names = []
#或是用 := (Walrus Operator, assignment expression)
if (names := votes.get(key)) is None:
votes[key] = names = []
#這種情況用setdefault最簡潔
names = votes.setdefault(key, [])