Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

【Python入門】辞書とin演算子の使い方についての解説

Pythonにおける辞書オブジェクトの「キー」と所属検査演算子inの使い方・関係についての解説

今回はPythonの比較演算子の1つ「in」と辞書オブジェクトとの関係についての基本事項の確認です。

プログラミング言語の人気オンラインコース

所属検査演算子in

まずPythonにおいてin演算子は比較の項目の中に書かれています。よって比較という機能をつかさどる演算子の一種です。そして、比較の中でも所属関係を検査する演算子という役割です。

以上より今回の記事限りの用語としてin演算子のことを所属検査演算子と呼ぶことにします。厳密にいえばこれはPython公式用語ではありません。

さてその所属検査演算子inの使い方ですが、

A in B

というこれだけですね。AがBに属していればTrueとなります。そうでなければFalseとなります。

では次に辞書オブジェクトとの関係を見ていきましょう。特に、

A in 辞書オブジェクト

となる場合について見ていきます。

inと辞書オブジェクトの関係

「in 辞書」は辞書の「キー」について調べる

所属検査演算子のinと辞書オブジェクトについては、公式ドキュメントで次のように書かれています。

すべての組み込みのシーケンス型と集合型に加えて、辞書も in を辞書が与えられたキーを持っているかを調べる演算子としてサポートしています。

辞書オブジェクトは、「キー」と「値」の2つの情報がセットされていますが、そのうちin演算子で比較されるのは「キー」だけです。

実際に簡単なコードで考えてみましょう。

my_dict = {"G":"Google", "A": "Amazon", "M": "Microsoft"}

print("G" in my_dict)
print("Google in my_dict)

これを実行すると、

True
False

となります。キーである「G」を指定したときはTrue、値である「Google」を指定したときはFalseとなっています。所属検査演算子inは、辞書オブジェクトについてはあくまで「キー」の情報を比較するものであり、

キー in 辞書

として、辞書のキーの中に、指定したキーがあるかどうかを考えるべき設計になっているからです。

さて以上の基本知識を踏まえて最後に、for文での使い方を見てみましょう。

for key in 辞書の解説

次のコードを見てください。これは辞書から新しいリストを内包表記を使ってつくる場合のコードです。なおリストと内包表記については、「Pythonのリストを「新リスト=[ 変数 for文]」と書く内包表記法について」と、「Pythonのリストの多重内包表記とfor文の処理の順番について」をご覧ください。

my_dict = {"G":"Google", "A": "Amazon", "M": "Microsoft"}

# リストを内包表記で作成
# 辞書オブジェクトのvalues()メソッドは、辞書の「値」だけを集めた特別なビューオブジェクトを作成する

[
    (key, company) for key in my_dict 
     for company in my_dict.values()
     if my_dict[key] == company
 ]

これを実行すると、

[('G', 'Google'), ('A', 'Amazon'), ('M', 'Microsoft')]

というリストが出来上がります。各要素がキーと値のタプルとなっています。

この動作の流れを大雑把に説明すると、

辞書オブジェクトmy_dictのキーの最初のキーが、変数keyに代入されて、key="G"となる
↓
キー「G」は辞書オブジェクトのキーに属しているのでTrue(ここでFalseならばプログラムは終了)
↓
2つ目のfor文以下が実行される
↓
my_dict.values()によってmy_dictの値だけを集めた特別なオブジェクトであるビューオブジェクトが作成され、その最初の要素の”Google”が、変数companyに代入され、company="Google"
↓
そのビューオブジェクトに"Google"は属しているので、True
↓
if my_dict[key] == companyが実行される
↓
(key, company)というタプル形式で、("G", "Google")ができあがる

という感じになります。

愛を分かち合いましょう