web-dev-qa-db-ja.com

Python dict.get( 'key')vs dict ['key']

なぜこれがKeyErrorをスローするのですか?

d = dict()
d['xyz']

しかし、これはそうではありませんか?

d = dict()
d.get('xyz')

ここで記述子が役割を果たすかどうかも知りたいです。

14
foundling

これは単にget()メソッドが定義される方法です。

から Python docs

キーがディクショナリにある場合はキーの値を返し、それ以外の場合はデフォルトを返します。 defaultが指定されていない場合、デフォルトでNoneに設定されるため、このメソッドでKeyErrorが発生することはありません。

デフォルトの「not-found」戻り値はNoneです。他のデフォルト値を返すことができます。

d = dict()
d.get('xyz', 42)  # returns 42
21
Martin Konecny

角かっこによるアクセスにはデフォルトがありませんが、getメソッドにはデフォルトがあり、デフォルトはNoneです。 getのドキュメントから(a = dict(); help(a.get)経由)

Help on built-in function get:

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
3
Eric Renouf

あなたの最初の質問はよく答えられていると私は信じていますが、私はへの応答を見ていません

ここで記述子が役割を果たすかどうかも知りたいです。

技術的には、記述子doはここで役割を果たします。これは、すべてのメソッドが記述子を使用して暗黙的に実装されているためですが、使用されている明確な明示的な記述子はなく、質問している動作とは関係ありません。

1
Jacob Zimmerman

[1]キーがマップになく、[2]これら2つの操作は性質が異なるという理由だけで。

から dict マッピングタイプ:

d[key]

Dのアイテムをキーキーで返します。キーがマップにない場合、KeyErrorを発生させます。

get(key[, default])

キーがディクショナリにある場合はキーの値を返し、それ以外の場合はデフォルトを返します。 defaultが指定されていない場合、デフォルトでNoneに設定されるため、このメソッドでKeyErrorが発生することはありません。

1
tjeloep