Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はPythonの比較演算子の1つ「in」と辞書オブジェクトとの関係についての基本事項の確認です。
まずPythonにおいてin演算子は比較の項目の中に書かれています。よって比較という機能をつかさどる演算子の一種です。そして、比較の中でも所属関係を検査する演算子という役割です。
以上より今回の記事限りの用語としてin演算子のことを所属検査演算子と呼ぶことにします。厳密にいえばこれはPython公式用語ではありません。
さてその所属検査演算子inの使い方ですが、
A in B
というこれだけですね。AがBに属していればTrueとなります。そうでなければFalseとなります。
では次に辞書オブジェクトとの関係を見ていきましょう。特に、
A 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文での使い方を見てみましょう。
次のコードを見てください。これは辞書から新しいリストを内包表記を使ってつくる場合のコードです。なおリストと内包表記については、「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")ができあがる
という感じになります。
世界最大の動画学習サイトUdemyのおすすめPython講座【PR】