01 / 07
番号で引くか、名前で引くか
入れ物が2つあると、どちらを使うか迷う。目安はこれだよ。
- 同じ種類のものを並べるならリスト。「点数を5件」「くだものを3つ」
- 1つのものの項目をまとめるなら辞書。「名前と値段と個数」
前のレッスンでは、名前・値段・個数を3本のリストに分けて持った。あれは本当は1件ぶんのまとまりを、むりやりバラバラにしていたんだ。
くり返しとデータの持ち方
INPUT · スライド
01 / 07
入れ物が2つあると、どちらを使うか迷う。目安はこれだよ。
前のレッスンでは、名前・値段・個数を3本のリストに分けて持った。あれは本当は1件ぶんのまとまりを、むりやりバラバラにしていたんだ。
02 / 07
1件ぶんを辞書にすると、名前と値段がはなれない。番号を合わせる必要もなくなるよ。
取り出すときは [] の中にキーを書く。番号ではなく名前なので、並び順を気にしなくていい。
shina = {"namae": "パン", "nedan": 160}print(shina["namae"])print(shina["nedan"])実行結果
パン 160
03 / 07
そして、その辞書をリストに並べる。これが現実のデータのいちばんふつうの形だよ。名簿も、商品一覧も、注文の履歴も、たいていこの形をしている。
くり返しをかければ、3件でも1000件でも同じコードで処理できる。ここがこの章のゴールだ。
kago = [{"namae": "パン", "nedan": 160}, {"namae": "のり", "nedan": 220}]for shina in kago: print(shina["namae"])実行結果
パン のり
04 / 07
shina["namae"] を何度も書くと読みにくい。取り出した値に名前をつけておくと、ぐっと読みやすくなるよ。
とくに f 文字列の中では {shina["namae"]} とクォートが重なって書きづらい。先に変数で受けておけば、その悩みも消える。
shina = {"namae": "パン", "nedan": 160, "kosuu": 2}namae = shina["namae"]shoukei = shina["nedan"] * shina["kosuu"]print(f"{namae} {shoukei}円")実行結果
パン 320円
05 / 07
辞書に無いキーを [] で引くと KeyError になって止まってしまう。あるか分からないなら in か get を使おう。
if "zaiko" in shina: … あるかどうかを尋ねるshina.get("zaiko", 0) … 無ければ 0 を返してもらう現実のデータは項目が欠けていることがある。欠けていても止まらないように書けると強いよ。
shina = {"namae": "のり"}print(shina.get("zaiko", 0))実行結果
0
06 / 07
「どれが何個あるか」を数えるときは、空の辞書を外に置いて、まわしながら足しこむ。
はじめて出たキーはまだ辞書に無いので、in で見て 1 を入れる。2回目からは += 1 する。この形はそのまま覚えてしまっていいよ。
kudamonos = ["りんご", "みかん", "りんご"]kazoe = {}for kudamono in kudamonos: if kudamono in kazoe: kazoe[kudamono] += 1 else: kazoe[kudamono] = 1print(kazoe)実行結果
{'りんご': 2, 'みかん': 1}07 / 07
入れ物とくり返しがそろうと、たいていのデータ処理は書けるようになる。あとは同じ処理を何度も書かない工夫だけだ。
次の章では、ひとまとまりの処理に名前をつけて呼び出せるようにする。この章で書いた集計にも名前がついて、いつでも使える部品になるよ。
その前に、10問で仕上げよう。