あいつの日誌β

働きながら旅しています。

python の辞書には get がある件

あらすじ

Python では Javascript で言う所の オブジェクトのプロパティの値を get() でも取得できると思っていました。 そんなわけでこんなコードを書いてみた。

user = {'name': 'okamuuu'}
print user.get('name')

レビューで指摘されました

name は必ず存在することが期待されるので user['name'] に変更して KeyErrorはエラーとして検知できるようにしていただけますでしょうか?

user.get('name') と user['name'] の違いわかっていない

プロパティが存在している場合は同じ挙動

>>> user = {'name': 'okamuuu'}
>>> print user.get('name')
okamuuu
>>> print user['name']
okamuuu

プロパティが存在していない場合は挙動が異なる

>>> print user.get('nameeee')
None
>>> print user['nameeeee']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'nameeeee'

というわけで user['name'] と書いてあるのに name がセットされていないと KeyError が発生するのでより厳密に書きたいときはそうするとよいでしょう

おまけ

以下のようなコードは

>>> userB = {}
>>> print userB.get('name') or 'okamuuu'
okamuuu

こんな風に書くこともできます

>>> print userB.get('name', 'okamuuu')
okamuuu