1

基本的に、これは、インデックスがdictに存在するかどうかを見つけようとしたときに発生した問題から始まりました。

if collection[ key ]: # if exist
    #do this
else: # if no exist
    #do this

しかし、インデックスが実際に存在しない場合、KeyErrorがスローされます。したがって、Pythonのドキュメントを読んでください。欠落している()が定義されている場合、 KeyErrorはスローされません。

collection = {}
def collection.__missing__():
    return false

ターミナルの上記のコードは私に与えます:

ghelo@ghelo-Ubuntu:~/Music$ python __arrange__.py
  File "__arrange__.py", line 16
    def allArts.__missing__():
               ^
SyntaxError: invalid syntax

それで、これを正しく行う方法は?ところで、これにはPython2.7を使用する必要があります。また、Python 3で実行する場合に違いはありますか?

4

4 に答える 4

6

これがあなたのやり方です:

if key in collection:

または、@ sdolanによって提案されているように、このメソッドを使用できます。この.getメソッドは、デフォルト(オプションの2番目のパラメーター)が存在しない場合はそれを元に戻します。

if collection.get(key, None):

使用したい場合__missing__は、dictを拡張するクラス(この場合)に適用します。

class collection(dict):

    def __missing__(self, key):
        print "Too bad, {key} does not exist".format(key=key)
        return None


d = collection()
d[1] = 'one'

print d[1]

if d[2]:
    print "Found it"

出力

one
Too bad, 2 does not exist
于 2012-08-18T06:27:26.510 に答える
0

次のようにtry..exceptを使用してKeyError例外を処理することにより、キーが存在するかどうかを確認できます。

try:
    collection[key]
    # do this
except KeyError:
    # do that

このコーディングスタイルは、EAFP「許可よりも許しを求める方が簡単」という意味で知られていますhttp://docs.python.org/glossary.html#term-eafp

別の方法はget、キーが見つからない場合にデフォルトでNoneを返すメソッドを使用することです。

if collection.get(key) is not None:
    # do this
else:
    # do that
于 2012-08-18T06:29:08.110 に答える
0

いくつかの答えは、あなたが実際の状況でおそらく何をすべきかをすでに示していますが、行方不明はあなたが尋ねたことをすることもできます。

それを使用したい場合は、dictをサブクラス化する必要があります。

class mydict(dict):
  def __missing__(self, key):
    return 'go fish'

次に、次のコマンドで作成できます。

d = mydict()

そしてそれにアクセスする

d[0]
=> 'go fish'
d[0] = 1
d[0]
=> 1
于 2012-08-18T06:37:28.970 に答える
0

if selection.has_key(keylookingfor)を使用できます。

于 2012-08-18T19:23:21.937 に答える