ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
Python の辞書(dict)であるキーが存在するかを判定する最短かつ推奨の方法は、in 演算子を使って 'キー名' in 辞書 と書くことです。結果は True(存在する)か False(存在しない)で返ります。以下では in を中心に、dict.get()・try/except など各手法と使い分けを、最小サンプルコードとともに整理します。
in 演算子で存在チェック(推奨・最短)
もっとも簡潔で速いのが in 演算子です。キー in 辞書 と書くだけで、そのキーが辞書に存在すれば True、なければ False を返します。辞書を直接 in の右側に置くと、自動的にキーを対象に判定されます(値ではありません)。
|
d = {'apple': 100, 'banana': 200}
if 'apple' in d: print('apple は存在します') # 実行される
print('apple' in d) # True print('grape' in d) # False |
逆に「存在しないこと」を調べたいときは not in を使います。if not ('key' in d): と書くより読みやすく、こちらが定石です。
|
d = {'apple': 100, 'banana': 200}
if 'grape' not in d: print('grape は存在しません') # 実行される |
dict.get() でデフォルト値とともに判定
「キーが存在するか」を調べつつ、存在すればその値も取り出したい場面では dict.get() が便利です。get(キー, 既定値) は、キーがあればその値を、なければ第2引数の既定値(省略時は None)を返します。d[key] と違い、存在しないキーでも KeyError を出さずに安全に扱えます。
|
d = {'apple': 100, 'banana': 200}
print(d.get('apple')) # 100 print(d.get('grape')) # None(KeyError にならない) print(d.get('grape', 0)) # 0(既定値を指定)
# 存在チェックと値取得をまとめて value = d.get('banana') if value is not None: print(value) # 200 |
ただし、値そのものが None になり得る辞書では、get() の戻り値が None でも「キーが無い」とは断定できません。その場合は純粋な存在判定に in を使い分けてください。
keys() を使う書き方と、非推奨の理由
'キー' in d.keys() と書いても結果は正しく得られますが、これは非推奨です。d.keys() はキー一覧のビューを返す呼び出しが余分に挟まるだけで、辞書そのものに in を適用する 'キー' in d と結果は同じだからです。in d はハッシュによる高速な検索(平均 O(1))で判定するため、可読性でも速度でも in d が勝ります。
|
d = {'apple': 100, 'banana': 200}
# 非推奨(冗長) print('apple' in d.keys()) # True
# 推奨(シンプル&高速) print('apple' in d) # True |
なお、値の中に目的のものがあるかを調べたいときは in d.values() を使います。in d(= in d.keys())はあくまでキーの判定であることに注意してください。
try / except KeyError で例外として扱う
「キーがあるのが普通で、無いのは例外的」というケースでは、try / except KeyError で d[key] を直接参照する書き方もあります。存在しないキーを参照すると KeyError が送出されるので、それを捕捉します。
|
d = {'apple': 100, 'banana': 200}
try: value = d['grape'] print(value) except KeyError: print('grape は存在しません') # 実行される |
分岐の前にまず判定したいだけなら in や get() のほうが簡潔です。例外処理は「例外的な不在」を扱う場面に向いています。
存在しないキーを参照すると KeyError
そもそも、なぜ存在チェックが必要になるのか。それは、辞書に無いキーを d[key] という角括弧(ブラケット)で参照すると KeyError が発生してプログラムが止まるからです。
|
d = {'apple': 100}
print(d['grape']) # Traceback (most recent call last): # ... # KeyError: 'grape' |
これを避けるために、事前に in で確認するか、get() で安全に取り出すか、try/except で捕捉するか、のいずれかを選びます。
各手法の比較表
用途に応じて最適な手法は変わります。迷ったら in 演算子を基本にし、値も同時に欲しいなら get() を選ぶのが目安です。
| 手法 | 書き方 | 可読性 | 速度 | 向いている用途 |
|---|---|---|---|---|
| in 演算子(推奨) | 'key' in d |
高い | 速い | 存在の有無だけを判定したい |
| dict.get() | d.get('key', 既定値) |
高い | 速い | 存在チェック+値の取得を同時に |
| keys() を使う | 'key' in d.keys() |
やや低い | やや遅い | 非推奨(in d で代替可) |
| try / except | try: d['key'] |
普通 | 不在が多いと遅い | 不在が例外的なケース |
よくある質問
Q. キーが「存在しないこと」をチェックするには?
A. not in を使います。if 'key' not in d: と書けば、キーが無いときだけ True になります。if not ('key' in d): と同じ意味ですが、not in のほうが簡潔で読みやすいため推奨されます。
Q. キーの存在チェックと「値の存在チェック」はどう違う?
A. 'key' in d はキーが存在するかの判定です。一方、辞書の値の中に特定の値があるかを調べたいときは 値 in d.values() を使います。たとえば d = {'apple': 100} に対し、'apple' in d は True ですが 100 in d は False(キーに 100 は無い)、100 in d.values() は True です。
Q. Python3 で has_key() は使える?
A. 使えません。Python2 に存在した d.has_key('key') は Python3 で廃止されており、呼び出すと AttributeError になります。Python3 ではキーの存在チェックに in 演算子('key' in d)を使ってください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 辞書の作成
- 値の参照
- 要素の追加と更新
- 要素の削除 (辞書 Python)
- キーの存在チェック
- dictの中身を確認する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?