3

私は Python の経験が少しありますが、Udacity コンピューター サイエンス コースを受講して、学んだことのギャップを埋め、既に知っていることを補足しています。このコースでは、キーがハッシュテーブルにない場合にキーの値として None を返すハッシュテーブル ルックアップ関数について説明しました。Python の辞書型は、キーが存在しない場合に KeyError をスローするため、コースではkey in mydict値を取得する前に使用するように指示されています。

私が疑問に思っているのは、次のことを行う方が良いかどうかです。

mydefaultval = 75
key = ..
mydict = ..
if key in mydict:
    val = mydict[key]
else:
    val = mydefaultval

.. また

mydefaultval = 75
key = ..
mydict = ..
try:
    val = mydict[key]
except KeyError:
    val = mydefaultval

Pythonがキーが存在するかどうかを確認するには、辞書でそれを見つける必要があると思います。そのキーの値を取得すると、同じことを 2 回行う必要があります。これを考えるのは正しいですか、それともPythonは何か他のことをしますか?

4

2 に答える 2

10

最良の方法は、dict.get を使用することです。

val = my_dict.get(key, mydefaultval)

このようなすばらしい方法がなかった場合は、例外を使用することをお勧めします。Python の文化では、例外は禁止されておらず、多くの場合、明示的なチェックによって実際に例外がキャッチされます。

于 2012-06-21T00:07:10.367 に答える
0

特定の dict を使用するたびにデフォルトが同じ値になる場合、別のオプションは を使用することcollections.defaultdictです。解決策よりも辞書を宣言する方が冗長dict.get()ですが、使用法ははるかに簡潔です。

>>> from collections import defaultdict
>>> mydict = defaultdict( lambda: 75 )
>>> mydict[3]
75
于 2012-06-21T01:31:55.550 に答える