[Python] dictの使い方

[Python] dictの使い方

概要

  • pythonには複数のデータをまとめて管理する方法がいくつも用意されていて、
    その中でよく使われる型としてリスト(list : 他言語のarray)と辞書(dict : 他言語のmap)があります。
  • 今回はdictの使い方を簡単に整理しました。
  • listの使い方はここにまとめました。
    [Python] listの使い方

参考

辞書(dict)

dict

  • dictは他言語のmapと同じくkeyとvalueをセットで管理するものです。
  • 大きい箱の中にkeyとvalueのセットの小袋が散らかっている感じです。
  • なのでlistは追加したデータが0から順番に保存されることに対して、
    dictのデータは順番が決まっていないことも特徴です。

初期化

  • dictは{}でデータを囲んで初期化します。
  • 一つのデータは『key : value』のセットに保存します。
  • 他言語では中のデータ型を定義する必要があったりしますが、
    pythonのdictはデータを定義する必要がなく、同じ型にしなくてもエラーになりません。
  • そしてkeyも文字列以外の型も可能です。
dict_sample.py
# dictの初期化
dict_sample_1 = {"data1" : 1, "data2" : 2}
dict_sample_2 = {"data1" : 1, "data2" : 2, "data3" : "abc"}
dict_sample_3 = {1 : 1, 2 : 2, 3 : "abc"}

# dictの出力
print(dict_sample_1)
print(dict_sample_2)
print(dict_sample_3)

実行結果 :

{‘data1’: 1, ‘data2’: 2}
{‘data1’: 1, ‘data2’: 2, ‘data3’: ‘abc’}
{1: 1, 2: 2, 3: ‘abc’}

データの取得

keyで取得

  • データは dict[key]で取得します。
  • dict名で中身をすべてみることはできますが、
    その結果が定義した通りの順番で表示されることは保証できまいことになっています。
dict_sample.py
# dictの初期化
dict_sample = {"data1" : 1, "data2" : 2, "data3" : "abc"}

# dictの出力
print(dict_sample)
print(dict_sample["data1"])
print(dict_sample["data2"])
print(dict_sample["data3"])

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: ‘abc’}
1
2
abc

keyerror

  • データにいないkeyで取得するとKeyErrorになります。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : "abc"}
print(dict_sample)

# データにいないkeyから取得するとKeyError
print(dict_sample["data4"])

実行結果 :

Exception has occurred: KeyError

データ確認 (in)

  • エラー回避のためにデータがあるかを確認する方法として in があります。
  • 『key in dict』でデータがあるkeyの場合はTrue、ない場合はFalseを出力します。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : "abc"}
print(dict_sample)

# dict中にデータがあるkeyの場合はTrue、ない場合はFalseを出力
print("data1" in dict_sample)
print("data4" in dict_sample)

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: ‘abc’}
True
False

getメソッド

  • KeyErrorを回避するためにgetメソッドでデータを取得する方法もあります。
  • 設定していないkeyを取得するとエラーではなくNoneが取得できます。
  • 2番目にデフォルトを設定するとNoneの代わりにデフォルトが取得できます。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : "abc"}
print(dict_sample)

# getメソッドでデータ取得
print(dict_sample.get("data1"))
print(dict_sample.get("data2"))
print(dict_sample.get("data3"))

# 登録されていないkeyを設定するとNoneを出力
print(dict_sample.get("data4"))

# 登録されていないkeyを設定するときのデフォルトを設定可能
print(dict_sample.get("data4", "No data"))

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: ‘abc’}
1
2
abc
None
No data

データの更新

  • データの更新は登録済みのkeyに dict[key] = value で更新します。
  • 登録されていないkeyを設定すると追加になります。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : 3}
print(dict_sample)

# データの更新、出力
dict_sample["data3"] = 4
print(dict_sample)

# 登録されていないkeyを設定すると追加
dict_sample["data4"] = 5
print(dict_sample)

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
{‘data1’: 1, ‘data2’: 2, ‘data3’: 4}
{‘data1’: 1, ‘data2’: 2, ‘data3’: 4, ‘data4’: 5}

データの追加

  • データの追加は登録されていないkeyとvalueを dict[key] = value で追加になります。
  • すでに登録追加されているkeyを追加すると更新になります。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : 3}
print(dict_sample)

# データの追加、出力
dict_sample["data4"] = 4
print(dict_sample)

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
{‘data1’: 1, ‘data2’: 2, ‘data3’: 3, ‘data4’: 4}

データの削除 (pop)

  • データを削除する場合は popメソッドにkeyを設定します。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : 3}
print(dict_sample)

# データの削除、出力
dict_sample.pop("data3")
print(dict_sample)

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
{‘data1’: 1, ‘data2’: 2}

データの初期化 (clear)

  • 全データをクリア(全削除)はclearメソッドで行います。
  • dictそのものの削除ではなく空のdictになります。
dict_sample.py
# dictの初期化、出力
dict_sample = {"data1" : 1, "data2" : 2, "data3" : 3}
print(dict_sample)

# データの全クリア、出力
dict_sample.clear()
print(dict_sample)

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
{}

データ数取得 (len)

  • dict内にあるデータ数は len(dict)で取得します。
dict_sample.py
# dictの初期化
dict_sample = {"data1" : 1, "data2" : 2, "data3" : 3}

# データ出力
print(dict_sample)

# データ数出力
print(len(dict_sample))

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
3

dict内のdict (nested)

  • dictのデータには定義も型の制限もないのでdictもそのままデータとして設定可能です。
dict_sample.py
# dictの初期化
dict_sample_1 = {"data1" : 1, "data2" : 2, "data3" : 3}

# dict内にdictを設定
dict_sample_2 = {"data4" : 1, "data5" : 2, "data6" : dict_sample_1}

# データ出力
print(dict_sample_1)
print(dict_sample_2)

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
{‘data4’: 1, ‘data5’: 2, ‘data6’: {‘data1’: 1, ‘data2’: 2, ‘data3’: 3}}

for文での利用

  • dictそのままのfor文はvalueではなくkeyを取得します。
  • dict.keys()でkeyを、dict.values()でvalueを取得できます。
  • dict.items()でkey, valueをセットで取得できます。
dict_sample.py
# dictの初期化
dict_sample = {"data1" : 1, "data2" : 2, "data3" : 3}

print(dict_sample)

print("-----default-----")
# デフォルトではkeyを取得
for key in dict_sample:
  print(key)

print("-----keys-----")
# keysでkeyを取得
for key in dict_sample.keys():
  print(key)
  
print("-----values-----")
# valuesでvalueを取得
for value in dict_sample.values():
  print(value)
  
print("-----items-----")
# itemsでkey, valueを取得
for key, value in dict_sample.items():
  print(f"{key} : {value}")

実行結果 :

{‘data1’: 1, ‘data2’: 2, ‘data3’: 3}
—–default—–
data1
data2
data3
—–keys—–
data1
data2
data3
—–values—–
1
2
3
—–items—–
data1 : 1
data2 : 2
data3 : 3

リスト(list)との組み合わせ

list

  • listは[]で囲んで初期化します。
  • データは0から順番にデータが格納されます。
  • [Python] listの使い方
dict_sample.py
# listの初期化
list_sample = [1,2,3]

# listの出力
print(list_sample)

実行結果 :

[1, 2, 3]

list内にdict

  • listのデータには型の定義も制限もないのでdict型をそのまま追加できます。
list_sample.py
# dictの初期化
dict_sample = {"data1" : 1, "data2" : 2}

# listの初期化、データにdictを追加
list_sample = [1,2,dict_sample]

# listの出力
print(list_sample)
print(list_sample[0])
print(list_sample[1])
print(list_sample[2])

実行結果 :

[1, 2, {‘data1’: 1, ‘data2’: 2}]
1
2
{‘data1’: 1, ‘data2’: 2}

dict内にlist

  • dictもlistと同じくデータの型の定義も制限もないのでlist型をそのまま追加できます。
list_sample.py
# listの初期化
list_sample = [1,2,3]

# dictの初期化、データにlistを追加
dict_sample = {"data1" : 1, "data2" : list_sample}

# listの出力
print(dict_sample)
print(dict_sample["data1"])
print(dict_sample["data2"])

実行結果 :

{‘data1’: 1, ‘data2’: [1, 2, 3]}
1
[1, 2, 3]

まとめ

  • 初期化 : dict = {key:value, …}
  • データ取得 : dict[key], dict.get(key), dict.get(key, default)
  • データ確認 : key in dict
  • 追加 :
    • dict[key] = value
  • 削除 :
    • dict.pop()
  • 全データクリア : dict.clear()
  • データ数取得 : len(dict)