Python bite: キー不在時の辞書の挙動
Submitted by fujiwara on 2007, September 10 - 3:24pm.
Tagged: python
Python では、 キーを指定して値を取得する「辞書」(あるいは「マッピング」) が言語として提供されています。
dic = { 'a': 'alpha', 'b': 'beta' }
a = dic['a']
"[]" による辞書アクセス
Perl の連想配列や、 Java の java.util.Map 実装クラスの場合、 キーが存在しない場合の挙動は、 基本的に空値(e.g.: null)等を返すようになっていますが、 Python の場合は例外が浮揚します。
> a = dic['unknown'] Traceback (most recent call last): File "", line 1, in ? NameError: name 'unknown' is not defined
不在キーでの辞書アクセス
なまじ他の言語での辞書/マップ使用経験があると咬まれます。
例外を抑止するだけなら、 辞書がキーを含んでいることを確認してから取得することで、 実現できるのですが:
if dic.has_key['unknown']:
a = dic['unknown']
安全な辞書アクセス(性能悪し)
内部的な実現を考えた場合、
unknown に関するハッシュ値計算や索引検索が、
has_key() と
[] アクセスの2回実行されることになりますから、
実行性能的によろしくありません。
そこで、キー不在の可能性がある場合、
[] によるアクセスではなく、
get(key[, default])
メソッドによるアクセスをする必要が有ります。
a = dic.get('unknown', None)
安全な辞書アクセス