くり返しとデータの持ち方

INPUT · スライド

ひとつずつ取り出す

01 / 07

回るのはキーのほう

リストを for に渡すと、中身が順に出てきた。辞書を渡すと出てくるのは——キーのほうだよ。

値ではない。ここは一度は必ずおどろくところなので、「回るのはキー」と声に出して覚えよう。

nedans = {"りんご": 120, "みかん": 80}for kagi in nedans:    print(kagi)

実行結果

りんご
みかん

02 / 07

キーから値を引く

キーが手に入れば、値は nedans[kagi] で引ける。この2行で「辞書を全部見る」ができるようになったよ。

並ぶ順番は、書いた順のまま。辞書は入れた順を覚えているので、実行するたびに順番が変わったりしないよ。

nedans = {"りんご": 120, "みかん": 80}for kagi in nedans:    print(kagi, nedans[kagi])

実行結果

りんご 120
みかん 80

03 / 07

keys でキーの一覧

キーだけを集めたものが欲しいときは keys()。

そのまま print すると dict_keys([...]) という見なれない形で出てくる。これは「キーの一覧」を表す専用の見た目で、for で回せばリストと同じように使えるよ。

for kagi in nedans: と for kagi in nedans.keys(): は同じ結果。短いほうがよく使われるけれど、keys() と書いてあると「キーを回すつもりだ」とはっきり伝わるね。

nedans = {"りんご": 120, "みかん": 80}print(nedans.keys())for kagi in nedans.keys():    print(kagi)

実行結果

dict_keys(['りんご', 'みかん'])
りんご
みかん

04 / 07

values で値の一覧

値だけが欲しいときは values()。キーに用が無いとき——合計を出すときなどに使うよ。

こちらも print すると dict_values([...]) と出てくる。中身は書いた順のままだよ。

nedans = {"りんご": 120, "みかん": 80}print(nedans.values())goukei = 0for atai in nedans.values():    goukei += ataiprint(goukei)

実行結果

dict_values([120, 80])
200

05 / 07

items でキーと値の組

キーと値の両方が欲しいときは items()。

そのまま print すると ('りんご', 120) のようなカッコの組が並んで出てくる。この「2つをまとめた組」の正体は、このグループの最後のレッスンで扱うタプルだよ。いまはキーと値がペアで並んでいると見ておけばいい。

nedans = {"りんご": 120, "みかん": 80}print(nedans.items())

実行結果

dict_items([('りんご', 120), ('みかん', 80)])

06 / 07

2つ同時に受け取る

items() の本当の使いどころはここ。for が受け取る名前をカンマで2つ書けるんだ。

for kagi, atai in nedans.items(): と書けば、1周ごとに kagi にキー、atai に値が入る。nedans[kagi] と書かずに済むので、こちらのほうがよく使われるよ。

nedans = {"りんご": 120, "みかん": 80}for kagi, atai in nedans.items():    print(kagi, atai)

実行結果

りんご 120
みかん 80

07 / 07

欲しいものだけを受け取る

辞書を回す書きかたを整理しよう。

  • for kagi in hito: … キーだけ。いちばん短い
  • for atai in hito.values(): … 値だけ
  • for kagi, atai in hito.items(): … 両方

欲しいものだけを受け取るのがきれいな書きかた。値しか使わないのに、キーを回して引きなおすのは少し遠まわりだよ。

次はいよいよ、辞書とリストを組み合わせる番。ここまでの道具が全部つながるよ。

hito = {"namae": "ゆい", "toshi": 15}for kagi, atai in hito.items():    print(f"{kagi}は{atai}")

実行結果

namaeはゆい
toshiは15