内包表記

INPUT · スライド

辞書も1行で作る

01 / 06

囲む記号を変える

ここまでは角かっこ [ ] で囲んできた。だからリストができていたんだ。

中かっこ { } に変えて、先頭を キー: 値 の形にすると、できるのは辞書になるよ。

namaes = ["ゆい", "はると"]print({n: len(n) for n in namaes})

実行結果

{'ゆい': 2, 'はると': 3}

02 / 06

形をならべて見る

違いは2か所だけ。囲む記号と、先頭にコロンがあるかどうかだよ。

  • リスト … [ 値 for 名前 in 回すもの ]
  • 辞書 … { キー: 値 for 名前 in 回すもの }

うしろの for の部分はまったく同じ。if を足せるところも同じだよ。骨格は共通で、囲む記号が入れ物を決めるんだ。

namaes = ["ゆい", "はると"]print([len(n) for n in namaes])print({n: len(n) for n in namaes})

実行結果

[2, 3]
{'ゆい': 2, 'はると': 3}

03 / 06

並び順はそのまま残る

辞書は入れた順番を覚えている。第2章でやったとおりだね。

だから辞書内包表記の結果も、回した順にそのまま並ぶ。安心してそのまま表示していいよ。

print({x: x * x for x in range(1, 5)})

実行結果

{1: 1, 2: 4, 3: 9, 4: 16}

04 / 06

items() で辞書から辞書を作る

回すものが辞書のときは、items() と組み合わせるのが定番だよ。キーと値を1組ずつ取り出せる、あの書きかただね。

for k, v in nedans.items() と書けば、k にキー、v に値が入る。あとは先頭で好きな形に組み立てればいい。

nedans = {"りんご": 100, "みかん": 80}print({k: v * 2 for k, v in nedans.items()})

実行結果

{'りんご': 200, 'みかん': 160}

05 / 06

キーと値を入れかえる

items() と組み合わせると、キーと値をひっくり返した辞書も1行で作れる。先頭を v: k と書くだけだよ。

「名前から値を引く」表を「値から名前を引く」表に作り変える、ということ。これは for で書くとそこそこ長くなるので、内包表記のありがたみが分かりやすい例だよ。

iros = {"りんご": "あか", "みかん": "だいだい"}print({v: k for k, v in iros.items()})

実行結果

{'あか': 'りんご', 'だいだい': 'みかん'}

06 / 06

if も足せる

うしろに if を足せるのもリストと同じ。条件に合う組だけを残した辞書が作れるよ。

「合格者だけの名簿を作る」のような処理が1行で書ける。次のレッスンでは、同じ中かっこでコロンを外すとどうなるかを見てみよう。

tens = {"ゆい": 80, "はると": 45, "みなと": 60}print({k: v for k, v in tens.items() if v >= 60})

実行結果

{'ゆい': 80, 'みなと': 60}