どうも!リョクちゃです。
Python勉強会の記事を書いて、もう16回目?なんですね。
前回は内包表記を使ってリスト変数をシンプルに作ってみる、について紹介しましたが、
今回は、辞書変数を内包表記を使ってシンプルに作ってみる、について紹介していきます。
上に書いたように、辞書変数も内包表記を使ってシンプルに記述することができちゃいます。
これを覚えて、スマートにコードを書けるようになりましょう。
ちなみに前回は、
リストの内包表記については、こちら
目次
内包表記を使った辞書変数を作る前に
例として、あるリスト変数lstXがあるとします。
この変数にはあらかじめ、[‘春’, ‘夏’, ‘秋’, ‘冬’]といった値が含まれています。
このリスト変数を新たに作成する辞書変数に含ませたい場合、
どのような書き方があるでしょうか?
Key(見出し)は何になるの?Value(内容)は何になるの?
といった疑問が湧くかもしれません。
ですが、いまは湧いてしまってかまいません。
あくまで、例としてリスト変数の値を辞書変数に含ませたい場合の紹介になりますので。
実際にコードで書いてみると、
1 2 3 4 5 6 7 8 |
lstX = ['春', '夏', '秋', '冬'] dictX = {} for i in lstX: dictX[i] = '四季' print(dictX) # 出力 # {'春': '四季', '夏': '四季', '秋': '四季', '冬': '四季'} |
この例では、Keyをリスト変数の値として扱っています。
そして、Keyのペアとして扱われるValue(内容)を”四季”としています。
内包表記を使って辞書変数を作る
では、実際に先ほどの例をもとにして、内包表記を使ってみます。
1 2 3 4 5 6 |
lstX = ['春', '夏', '秋', '冬'] dictX = {i: "四季" for i in lstX} print(dictX) # 出力 # {'春': '四季', '夏': '四季', '秋': '四季', '冬': '四季'} |
このようにして、書くことができます。
形としては、リストの内包表記で学んだ形と似ていますね。
辞書変数 = {<Key>: <Value> for <変数> in <反復可能オブジェクト>}
といった構造になりますね。
if文を使った内包表記の書き方
さらに応用を加えてみると、下のような書き方もできてしまいます。
1 2 3 |
lstX = ['春', '夏', '秋', '冬'] dictX = {i: "四季" for i in lstX if i == '春'} print(dictX) |
この場合、どうでしょう?
先ほどと違うのは、<反復可能オブジェクト>の後に条件式が付加されていることです。
これを解釈すると、変数iが’春‘であるときに”真(True)“になります。
したがって、春のときだけ、辞書変数dictXに含めると言うことができます。
実際に、コードを書いて実践してみてください。
内包表記の有無でのコード行数差
下図にそれぞれ内包表記を使った場合と使わない場合を比較しています。
無しの方が、各量は多くなってしまい、若干ではありますが見づらく感じるかもしれません。
一方で有りの場合では、各量も少なく見づらくないのがわかります。
慣れるまでは、内包表記無しで良いと筆者は思います。
まとめ
辞書変数作るうえでの内包表記は、
① 辞書変数 = {<Key>: <Value> for <変数> in <反復可能オブジェクト>}
② 辞書変数 = {<Key>: <Value> for <変数> in <反復可能オブジェクト> <条件式>}
おわりに
ざっくりと内包表記についてリスト編と通して辞書編も学ぶことができました。
リスト編でも触れましたが、
内包表記は覚えておくとスマートにコードが書けるようなるので、
便利でもあります。
また、効率も良いため、この記事をきっかけに形だけでも学んでもらえたらなと思います。
次回は、関数についてか、ここまで学んだことで
プログラムコンテストの問題を解いていくのもいいかなと思ってます。
Python以外も書いていくので、よろしくお願いします!では。