Day 3・リスト・辞書(まとめて扱う)=AIとの接点
辞書(キーと値)とネスト
名前で値を引く辞書と、辞書やリストを入れ子にするネストを学ぶ。
辞書は「名前で引く」入れ物
リストは番号で値を取り出しました。でも「0番目の値」より「name の値」の方が意味が分かりやすいですよね。辞書(dictionary)は、番号ではなく「キー(key)」という名前で値を取り出す入れ物です。キーと値をペアで持ちます。
user = {"name": "田中", "age": 28}
print(user["name"]) # 田中
print(user["age"]) # 28リスト(番号で引く)
user = ["田中", 28]
print(user[0]) # 田中 (0が何か分からない)辞書(名前で引く)
user = {"name": "田中", "age": 28}
print(user["name"]) # 田中 (意味が明確)なぜ辞書を使うのか
user[0] を見ても「0番目って何?」となりますが、user["name"] なら名前だと一目で分かります。データに名札を付けられるのが辞書の価値です。人間にもAIにも読みやすくなります。
値の追加・変更と存在チェック
user = {"name": "田中", "age": 28}
user["city"] = "東京" # 新しいキーを追加
user["age"] = 29 # 既存キーを上書き
print(user.get("email", "未登録")) # 未登録 (無いキーの保険)無いキーはエラー
user["email"] のように存在しないキーを角カッコで指定すると KeyError で止まります。有るか分からないときは get( ) を使うと、無い場合に指定した初期値を返してくれて安全です。
ネスト(入れ子)=辞書の中にリストや辞書
辞書の値には、数値や文字列だけでなく、リストや別の辞書も入れられます。これを「ネスト(入れ子)」と呼びます。現実のデータはほぼこの形です。
person = {
"name": "田中",
"hobbies": ["読書", "料理"],
"address": {"city": "東京", "zip": "100-0001"}
}
print(person["hobbies"][0]) # 読書
print(person["address"]["city"]) # 東京- まず person["address"] で内側の辞書を取り出す
- その結果に対して ["city"] でさらに値を取り出す
- [ ] を左から順に読めば、どこを掘っているか追える
AIにはこう聞く
深いネストで欲しい値の取り出し方が分からないときは、「このデータ構造から東京という値を取り出すには何と書けばいい?」とデータそのものを貼って聞くのが有効です。返ってきた [ ] の順番を、自分の目でも上から追って確認しましょう。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
user = {"name": "佐藤", "age": 30} から年齢を取り出す正しい書き方はどれですか。
person = {"address": {"city": "大阪"}} から "大阪" を取り出す書き方はどれですか。
リストと辞書の違いを、それぞれ何で値を取り出すかに注目して説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。