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

INPUT · スライド

書きかえる・足す・消す

01 / 07

値を書きかえる

取り出すときと同じ形を = の左に書くと、その値を書きかえられる。

変数に値を入れるのと同じ感覚だね。hito["toshi"] という置き場所に、新しい値を入れなおしているんだ。

hito = {"namae": "ゆい", "toshi": 15}hito["toshi"] = 16print(hito)

実行結果

{'namae': 'ゆい', 'toshi': 16}

02 / 07

新しいキーを足す

おどろくことに、追加もまったく同じ形で書く。

  • そのキーがすでにあれば … 上書きされる
  • そのキーが無ければ … 新しく増える

書き分けが要らないのは楽だけれど、キーを打ちまちがえると、こっそり別の項目が増えるという落とし穴でもあるよ。

hito = {"namae": "ゆい"}hito["shumi"] = "どくしょ"print(hito)

実行結果

{'namae': 'ゆい', 'shumi': 'どくしょ'}

03 / 07

空から組み立てる

追加ができるので、{} から始めて1つずつ足していける。

足した順に並ぶので、あとから見たときに読みやすい順で入れておくといいよ。

mise = {}mise["namae"] = "パンや"mise["nedan"] = 150print(mise)

実行結果

{'namae': 'パンや', 'nedan': 150}

04 / 07

del で消す

いらなくなったキーは del(デル)で消せる。del hito["toshi"] と書くよ。

消したあとにそのキーを引けば、もちろん KeyError。無いキーを del しようとしても KeyError になるので、消す前に「あるかどうか」を確かめたくなるね。

hito = {"namae": "ゆい", "toshi": 15}del hito["toshi"]print(hito)

実行結果

{'namae': 'ゆい'}

05 / 07

in でキーがあるか調べる

KeyError を避けるいちばん素直な方法が、引く前に確かめること。in を使うよ。

辞書に in を使ったとき、見ているのはキーのほう。値は探してくれないので気をつけてね。

hito = {"namae": "ゆい"}print("namae" in hito)print("shumi" in hito)

実行結果

True
False

06 / 07

get で「無かったとき」を決める

もうひとつの方法が get。hito.get("shumi", "みてい") と書くと、キーが無いときに 2つ目に渡した値を返してくれる。

2つ目を省くと None が返る。どちらにしてもエラーで止まらないのが get のいいところだよ。

hito = {"namae": "ゆい"}print(hito.get("shumi", "みてい"))print(hito.get("namae", "みてい"))print(hito.get("shumi"))

実行結果

みてい
ゆい
None

07 / 07

in と get の使い分け

2つの道具は、やりたいことで選ぶといい。

  • if "shumi" in hito: … あるときだけ何かをする
  • hito.get("shumi", "みてい") … 無ければこれで代用する

どちらも KeyError を防ぐための道具。hito["shumi"] といきなり書くのは、そのキーが必ずあると確信できるときだけにしよう。

次は、辞書の中身を1つずつ取り出して回してみるよ。

hito = {"namae": "ゆい"}if "shumi" in hito:    print(hito["shumi"])else:    print("しゅみはみとうろく")

実行結果

しゅみはみとうろく