1. ホーム 
  2. 備忘録 
  3. Python

辞書型

辞書型について

Python ではキーバリュー形式のリストとして辞書型を取り扱うことができる

キー側は文字列・数値・タプルなどの変更不可能なデータを扱うことができ、バリュー側はどの型でも扱うことができる

C# の辞書型のように宣言時の型に縛られるものではなく、同じ辞書内で複数の型が入り乱れても問題なく動かすことができる

辞書型の基本的な使用方法は以下の通りである


# 辞書型の宣言と参照
d = {'x': 10, 'y': 20}
print(d, type(d))  # {'x': 10, 'y': 20} <class 'dict'>
print(d['x'])  # 10

# 値の書き換え
d['x'] = 100
d['y'] = 'YYYY'
print(d)  # {'x': 100, 'y': 'YYYY'}

# 要素の追加
d['z'] = [1, 2, 3]
d[1] = 10000
print(d)  # {'x': 100, 'y': 'YYYY', 'z': [1, 2, 3], 1: 10000}

# タプルを辞書型へ変換
d2 = dict(a=10, b=20)
print(d2)  # {'a': 10, 'b': 20}

# リストを辞書型へ変換
#   リストの要素が3つ以上だとエラーになるため注意
d3 = dict([('c', 30), ('d', 40)])
print(d3)  # {'c': 30, 'd': 40}


d = {'x': 100, 'y': 200}
# 辞書の中身を展開する
print(d.items(), type(d.items()))  # dict_items([('x', 100), ('y', 200)]) <class 'dict_items'>
for k, v in d.items():
    print(k, ':', v)
# 結果
# x : 100
# y : 200


辞書型のメソッド

辞書型で使えるメソッドの一例を以下に記載する

記載のないメソッドについては help関数 などで確認すること


d1 = {'x': 10, 'y': 20}
d2 = {'x': -1, 'z': 100}

# キーの一覧取得
print(d1.keys())  # dict_keys(['x', 'y'])
# バリューの一覧取得
print(d1.values())  # dict_values([10, 20])
# d1 の値を d2 の値で更新する
#   既存のキー:上書き  新規のキー:追加
d1.update(d2)
print(d1)  # {'x': -1, 'y': 20, 'z': 100}

# バリューの取得
#   存在しないキーのときにエラーではなくNoneTypeを返す
print(d1.get('x'))  # -1
print(d1.get('hoge'))  # None
# print(d1['hoge'])  # KeyError: 'hoge'

# 要素の取り出し
print(d1.pop('x'))  # -1
print(d1)  # {'y': 20, 'z': 100}

# 要素の削除
del d1['y']
print(d1)  # {'z': 100}

# 辞書の中身を削除する
d1.clear()
print(d1)  # {}

d3 = {'x': 10, 'y': 20, 'z': 'ZZZZ'}
# キーが登録されているか確認する
if 'z' in d3:
    print('exist')

辞書型のコピー

辞書型もリストと同様に参照渡し・シャローコピー・ディープコピーの差に気を付けること


import copy

### 各コピーの違い
d = {'x': 1, 'y': 2, 'z': [-3, -4]}

d_assign = d  # 代入(参照渡し)
d_shallow = d.copy()  # シャローコピー
d_deep = copy.deepcopy(d)  # ディープコピー

d['x'] = 100
d['z'][0] = 200

print(d)  # {'x': 100, 'y': 2, 'z': [200, -4]}
print(d_assign)  # {'x': 100, 'y': 2, 'z': [200, -4]}
print(d_shallow)  # {'x': 1, 'y': 2, 'z': [200, -4]}
print(d_deep)  # {'x': 1, 'y': 2, 'z': [-3, -4]}