Py初めてのPython

Day 3リスト・辞書(まとめて扱う)=AIとの接点

辞書(キーと値)とネスト

名前で値を引く辞書と、辞書やリストを入れ子にするネストを学ぶ。

辞書は「名前で引く」入れ物

リストは番号で値を取り出しました。でも「0番目の値」より「name の値」の方が意味が分かりやすいですよね。辞書(dictionary)は、番号ではなく「キー(key)」という名前で値を取り出す入れ物です。キーと値をペアで持ちます。

PYTHON
user = {"name": "田中", "age": 28}
print(user["name"])  # 田中
print(user["age"])   # 28
波カッコ { } で、キー: 値 の形で書く

リスト(番号で引く)

PYTHON
user = ["田中", 28]
print(user[0])  # 田中 (0が何か分からない)

辞書(名前で引く)

PYTHON
user = {"name": "田中", "age": 28}
print(user["name"])  # 田中 (意味が明確)

なぜ辞書を使うのか

user[0] を見ても「0番目って何?」となりますが、user["name"] なら名前だと一目で分かります。データに名札を付けられるのが辞書の価値です。人間にもAIにも読みやすくなります。

値の追加・変更と存在チェック

PYTHON
user = {"name": "田中", "age": 28}
user["city"] = "東京"   # 新しいキーを追加
user["age"] = 29        # 既存キーを上書き

print(user.get("email", "未登録"))  # 未登録 (無いキーの保険)
get(キー, 初期値) は無いキーでもエラーにならない

無いキーはエラー

user["email"] のように存在しないキーを角カッコで指定すると KeyError で止まります。有るか分からないときは get( ) を使うと、無い場合に指定した初期値を返してくれて安全です。

ネスト(入れ子)=辞書の中にリストや辞書

辞書の値には、数値や文字列だけでなく、リストや別の辞書も入れられます。これを「ネスト(入れ子)」と呼びます。現実のデータはほぼこの形です。

PYTHON
person = {
    "name": "田中",
    "hobbies": ["読書", "料理"],
    "address": {"city": "東京", "zip": "100-0001"}
}
print(person["hobbies"][0])       # 読書
print(person["address"]["city"]) # 東京
外側から内側へ、順番に [ ] を重ねて掘っていく
  1. まず person["address"] で内側の辞書を取り出す
  2. その結果に対して ["city"] でさらに値を取り出す
  3. [ ] を左から順に読めば、どこを掘っているか追える

AIにはこう聞く

深いネストで欲しい値の取り出し方が分からないときは、「このデータ構造から東京という値を取り出すには何と書けばいい?」とデータそのものを貼って聞くのが有効です。返ってきた [ ] の順番を、自分の目でも上から追って確認しましょう。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

user = {"name": "佐藤", "age": 30} から年齢を取り出す正しい書き方はどれですか。

Q2

person = {"address": {"city": "大阪"}} から "大阪" を取り出す書き方はどれですか。

Q3

リストと辞書の違いを、それぞれ何で値を取り出すかに注目して説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。