format_list_bulleted
【Python】辞書(dict)のについて解説(Python3)
最終更新日時:2022-06-06 09:52:21



Python(Python3)で多数の値をまとめて使いたいときや他言語における配列のようなものを使いたいときがあると思います。そのような場合にPythonではイデックスを用いて複数のデータを扱う,辞書(dict)を使うことが出来ます。listはインデックス番号でデータを分類できますが,dictは任意のキー名をいることが出来ます.意味を持った順番を持たない複数のデータを扱う際にdictは非常に有効です。リスト(list)と集合(set)、タプル(tuple)と今回紹介する辞書(dict)の違いについては「Pythonのデータ構造(list・tuple・dict・set)まとめ(Python3)」を参照してください!

dictの宣言

dictは次のように宣言できます. 

辞書名={キー1:要素1,キー2:要素2,...}
辞書名=dict(キー1=要素1,キー2=要素2,...)

実際にデータを代入するときは次のように記述します. 

score1={"name":"e taro", "match":90, "English":80,"Japanese":70} 
score2=dict(name="etaro",match=90,English=80,Japanese=70)
print(type(score1))
print(score1)
print(type(score2))
print(score2)

同じkeyを複数宣言するとエラーになります。

実行結果

<class 'dict'>
{'name': 'e taro', 'math': 90, 'English': 80, 'Japanese': 70}
<class 'dict'>
{'name': 'etaro', 'match': 90, 'English': 80, 'Japanese': 70}

dictの要素の取り出し方

keyを指定して取得する方法とgetメソッドを使用する方法の二種類があります. 

keyを指定して取得

listでインデックス番号を用いて要素を取り出すときの方法と同様に実現できます。

score={ 'name':'e taro', 'match':90, 'English':80,'Japanese':70}
print(score['name'])

実行結果

e taro

指定したkeyが存在しない場合はエラーとなってしまうので注意しましょう。

getメソッドを使用

getメソッドを使用するときは次のように使用します。

辞書名.get(key)

実際に使用すると次のようになります。

score={'name':'e taro','match':90,'English':80,'Japanese':70}
print(score.get('name'))
print(score.get('science'))

実行結果

e taro
None

keyを指定して取得場合と違い、keyがない場合はNoneを返します。

dictのkeyを取得

dictの要素からkeyを検索

あるdictの中に特定の要素を持つkeyがあるかはリスト内包表記とitemメソッドを使用することで判定できます。

リスト名 = [i for i, k in score.items() if k == 検索したい文字列]

とすることで,要素を持つkeyがある場合はそのkeyのリストを,ない場合は空リストを返します。名前と各教科の点数を要素に持つdictから80点の教科と100点の教科を検索してみます。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
key_list1=[i for i, k in score.items() if k == 80]
key_list2=[i for i, k in score.items() if k == 100]
print(key_list1)
print(key_list2)

実行結果

['English', 'Japanese']
[]

要素が80のkeyがlistで返ってきます。マッチするkeyが存在しない場合は空リストが返っています。

keyが存在するか検索

keyが存在するかどうかはin演算子を用いることで取得できます。

key in dict

実際は次のように記述します。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
print('name' in score)
print('science' in score)

実行結果

True
False

存在する場合はTrueを,存在しない場合はFalseを返します。

dictの要素数を取得

dictの長さは他のデータ構造同様にlenを用いて取得できます。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
print(len(score))

実行結果

4

dictの要素の追加

dictに要素を追加したいときは

辞書名[追加したい要素のkey]=追加したい要素

とすればOKです。同じ辞書内に同じ名前のkeyが既にある場合は要素が更新されます。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
score['science']=90
print(score)
score['math']='100'
print(score)

実行結果

{'name': 'e taro', 'match': 90, 'English': 80, 'Japanese': 80, 'science': 90}
{'name': 'e taro', 'match': 90, 'English': 80, 'Japanese': 80, 'science': 90, 'math': '100'}

dictの要素の削除

dictから要素を削除するときは3種類の方法が考えられます。delとpopメソッド,clearメソッドです。ただ単純に値を削除したいときはdel,削除する値を使用するときはpopメソッドを使用します。また,dictの要素を全て削除し,空のdictにするときはclearメソッドを使用します。

del

delはdictの削除したい要素のkeyを指定することで特定の要素を削除出来ます。また,dict自体の削除も行えます。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
del score['name']
print(score)
del score
print(score)

実行結果

{'match': 90, 'English': 80, 'Japanese': 80}
NameError: name 'score' is not defined

出力の一行目について,scoreのnameというkeyに対応した要素が消去されているのが分かると思います。出力の二行目はエラーとなっていますが,これはscoreというdict自体を消去してしまったため定義されていなく,出力が出来ないためです。

popメソッド

popメソッドはdictの要素の消去を行うとともに,消去した要素を返り値として返します。削除する要素のkeyを引数として渡します。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
namestr=score.pop('name')
print(score)
print(namestr)

実行結果

{'match': 90, 'English': 80, 'Japanese': 80}
e taro

一回目のpopでnameというkeyに対応した要素を削除しnamestrに代入します。namestrには’e taro’が代入されます。

clearメソッド

clearメソッドはそのdictの要素を全て削除し空のdictにします。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
print(score)
score.clear()
print(score)

実行結果

{'name': 'e taro', 'match': 90, 'English': 80, 'Japanese': 80}
{}

clearメソッドを使用した後でdictが空になっていることが分かります。

dictの結合

listの結合は「+」で行えましたが,dictで行うとエラーになります。dictの結合はupdateメソッドを使用します。

score={'name':'e taro','match':90,'English':80,'Japanese':80}
add_data={'science':100,'social studies':70}
print(score)
score.update(add_data)
print(score)

実行結果

{'name': 'e taro', 'match': 90, 'English': 80, 'Japanese': 80}
{'name': 'e taro', 'match': 90, 'English': 80, 'Japanese': 80, 'science': 100, 'social studies': 70}

scoreに新しいdictであるadd_dataが結合されています。

この記事のまとめ

今回はPythonのdictで複数の要素をkeyで管理する方法を解説しました。最後に記事の要点をまとめます。

  • dictの要素はdict[keyの名前]もしくはgetメソッドで取得
  • dictのkeyの存在はin演算子で判定
  • dictの要素数はlen
  • dictの要素の削除はdelまたはpopメソッド
  • dict自体の削除はclearメソッド
  • dictの結合はupdateメソッド

pythonのdictを活用しましょう!