AKAGI Rails

鉄道模型シミュレーターNXで遊んでいたはずが、気づいたらPythonなども。

Pythonの「dict(辞書)型」虎の巻

Pythonらしいデータ構造といえばdict(辞書型)です。

(本稿はPython3系を前提とします。)

dict型の基本

dict型は、「キー」から「要素」にアクセスできるのが特徴です。

Object
list, tuple インデクス(i番目)から要素にアクセスできる
dict キーから要素にアクセスできる

dict型は波カッコ{}で括り、{キー:要素,...}のように書きます。キーから値を参照したいときは、リストと似た感じで変数名[キー]でアクセスします。

キーは文字列ないし整数がいいと思います。floatでもプログラムは走りますが数値計算の問題があるのでうまくないです。

要素は何でもありです。リストなども可。ここをどうするかが工夫のしどころです。

person = {
    "name": "Alice",
    "age": 30,
    "city": "Tokyo"
}

print(person["name"])  # → Alice

dict型の操作

list型と似ていて、直接変更・追加ができます。

# 値の変更・追加
person["age"] = 31           # 変更
person["job"] = "Engineer"   # 追加

存在しないキーにアクセスしようとすると、エラーになります。

person["sex"]  # -> KeyError

いくつか回避する方法があります。

if "age" in person.keys():
    age = person["age"]  # -> 31

getメソッドは、キーが存在しなかったときにエラーを送出して停止するのではなく、Noneオブジェクトを返します。また、キーが存在しないときに返すデフォルト値を None 以外に設定しておくことができます。

age = person.get("age")  # -> キーがあるので31
sex = person.get("sex")  # -> キーがないので `None`

birth = person.get("birth", "unknown")  # -> デフォルト値に"unknown"