18

私は通常、Python 辞書を操作するときに次のイディオムを使用します。

try:
    val = dct[key]
except KeyError:
    print key, " is not valid"

大きな辞書の場合、ステートメント

if key in dct:
    # do something

あまり効率的ではありません(読んだことは覚えていますが、実際にも気づいたことがあります)

今日、私は defaultdict を使用していましたが、defaultdict が KeyError を返すことは決してなく、代わりに元の辞書を更新することを忘れていました。

defaultdict を更新せずにルックアップを実行するにはどうすればよいですか? ユーザーがキーを再入力できるように、エラーを出力する必要があります。

ありがとうございました!

更新:いくつかの投稿者は、遅いという私の信念if key in dct:は間違っていると示唆しています。私は戻って、以前読んだ本の方が使いやすい本を調べましたtry: except:。これは 2002 年の Alex Martelli による Python Cookbook の Recipe 1.4 であり、ここでもオンラインで見つけることができます: Add an entry to dictionary。昔の記憶なんてあてにならない!レシピには「遅い」とは記載されておらず、使用していませんinが、has_key. それは単にそれtry: except:がよりPythonicであることを示しています(少なくともレシピの本のバージョン)。訂正と回答ありがとうございます。

4

2 に答える 2