私は通常、次のイディオムを使用します。辞書(Python)を更新せずにdefaultdictのキーをチェックする方法は? 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年のPython Cookbook、Alex Martelliのレシピ1.4です。オンラインでもご覧になれます:Add an entry to dictionary。古い記憶はとても信頼できません!レシピは「遅い」とは言及せず、in
でもhas_key
を使用していません。それは単にtry: except:
がPythonic(少なくともレシピの本版)であると言います。訂正と答えをありがとう。
可能な重複http://stackoverflow.com/questions/1602934/what-is-a-good-way-to-test-if-a-key-exists-in-python-dictionary –
重複ではありません。これは 'defaultdict'に関するものです。 –
'key in d 'は遅くなく、ピリオドではありません。もしあなたがそうでなければ、あなたはしっかりとした証明を得るべきです。 'timeit'は成功した' d [key] 'と同じくらい速く、' d [key] '+' except:pass'よりもずっと速く(ほぼ10倍)もしキーがほぼ常に存在するならば)。さて、 'd.keys()'のキー(Python 2.x)や 'list in key '(d。keys()) '(Python 3.x)は遅いですが、意図的にハッシュテーブルの情報を捨ててしまうためです。 – delnan