【基礎文法】Pythonのデータ構造<辞書➀> 作り方~追加更新まで

スポンサーリンク
Python_基本文法_入門編_データ構造(辞書3) Python

データ構造<辞書➀>作り方~追加更新・削除について

Pythonのデータ構造は大きく分けて3種類あります。

リスト、タプルそして今回紹介する「 辞書 」です。本記事はこの辞書について、主に辞書のつくり方、追加更新・削除について解説していきます。

これまでに紹介した、配列をつくるリストやタプルがあれば十分なのでは?

と思われるかもしれませんが、辞書には要素には順番がなく「キー」と呼ばれる値と紐づける識別子で管理していく点が大きな違いです。

リストやタプルのように要素の位置をインデックスで指定するのではなく、識別子を持たせることで、データの管理の仕方に柔軟性ものたせ、制御構文の簡素化を図ることができるようになります。

本記事では次のことについて理解できるようにまとめています。

  • 辞書のデータ構造のつくり方
  • 辞書へ新規要素を追加・更新する方法
  • 辞書の要素を削除する方法

重要度:★★★★

スポンサーリンク

1. 辞書のつくりかた

本項では辞書のつくり方について解説していきます。

Python 公式ドキュメント

https://docs.python.org/ja/3/library/stdtypes.html#mapping-types-dict

1.1. 辞書のつくりかた基本

辞書の構造

辞書(dict):{キー1:値1, キー2:値2, キー3:値3, ・・・}

  • キー:文字列、数値、タプルなどのイミュータブルな値
  • 値:イミュータブルな値のほか、リスト、辞書などミュータブルな値

辞書は「キー:値」をペアとした要素をカンマで区切り ” { ” と ” } ”で囲ってつくります。要素はキーで参照するので、一つの辞書に同じキーの要素を重複させることはできません。また、リストやタプルと異なり要素に順序はありません。


例1. 次に最も基本的な辞書のつくり方の例を示します。

キーにイミュータブルな値である、文字列と数値を指定しており、問題なく辞書を作成できています。

result1 = {'a':1, 'b':2, 'c':3}                     # キーが文字列
result2 = {10:'apple', 20:'orange', 30:'pine'}      # キーが数字

print(result1)                      #➀ {'a': 1, 'b': 2, 'c': 3}
print(type(result1))                #   <class 'dict'>

print(result2)                      #➁ {10: 'apple', 20: 'orange', 30: 'pine'}
print(type(result2))                #   <class 'dict'>
#-------------------------------------------

次にミュータブルな値であるリストを「キー」に指定した場合の例です。

リスト型は不適切である旨のエラーが発生しています。

result = {[1,2,3]:'apple'}      # キーがリスト(ミュータブル)

print(result)                   #➂ TypeError: unhashable type: 'list'
#-------------------------------------------

次にイミュータブルな値であるタプルを「キー」に指定した場合の例です。

今度は問題なく辞書を作成できています。

result = {(1, 2, 3):'apple'}    # キーがタプル(イミュータブル)

print(result)                   #➃ {(1, 2, 3): 'apple'}
print(type(result))             #➄ <class 'dict'>
#-------------------------------------------

また最後に「キー」を重複させた場合の例を紹介しましょう。

次のようにエラーになることはありませんが、最後に指定した「キー」:「値」の組み合わせのみが辞書として作成されていることが分かります。

result = {'a':1, 'b':2, 'b':3}      #   キーを重複指定
print(result)                       #➅  {'a': 1, 'b': 3}
print(type(result))                 #   <class 'dict'>
#-------------------------------------------
辞書のキーを重複させた場合







1.2. dictクラスで辞書をつくる

辞書をつくる dictクラス

辞書(dict): dict( [ (キー1,  値1), (キー2, 値2)・・・ ] ) ———-➀

辞書(dict): dict( ( [キー1,  値1], [キー2, 値2] ・・・) ) ———-➁

辞書(dict): dict( 引数1 = 値1, 引数2 = 値2, ・・・ ) ———-➂

  1. タプル(キー、値)のリストをdictクラスの引数に指定する
  2. リスト [キー、値] のタプルをdictクラスの引数に指定する
  3. キー = 値 のキーワード引数をdictクラスの引数に指定する

辞書をつくる組込みクラスとしてdict()があります。

dictクラスの使い方は、引数の指定の方法によって3パターンに分けられます。

Python 公式ドキュメント dictクラス

https://docs.python.org/ja/3/library/stdtypes.html#dict

例1.タプル(キー、値)のリストをdictクラスの引数に指定するパターンです。

# タプル(キー、値)のリストを引数にとる
result = dict( [ ('key1', 111),  ('key2', 222),  ('key3', 333) ] )

print(result)               #➀ {'key1': 111, 'key2': 222, 'key3': 333}
print(type(result))         #➁ <class 'dict'>
#-------------------------------------------

例2. リスト [キー、値] のタプルをdictクラスの引数に指定するパターンです。

# リスト[キー、値]のタプルを引数にとる
result = dict( ( ['key1', 111],  ['key2', 222],  ['key3', 333] ) )

print(result)               #➀ {'key1': 111, 'key2': 222, 'key3': 333}
print(type(result))         #➁ <class 'dict'>
#-------------------------------------------

例3. キーワード引数で指定するパターンです。

引数名は文字列ではありませんが、辞書にすると文字列のキーとして作成されます。

# キー = 値 のキーワード引数を指定する
result = dict( key1 = 111,  key2 = 222,  key3 = 333 )

print(result)               #➀ {'key1': 111, 'key2': 222, 'key3': 333}
print(type(result))         #➁ <class 'dict'>
#-------------------------------------------

因みに、引数名を文字列とした場合の例ですが、SyntaxErrorが発生します。

result = dict( 'key1' = 111,  'key2' = 222,  'key3' = 333 )
# SyntaxError: keyword can't be an expression
#-------------------------------------------

1.3. dict.fromkeys()メソッドで辞書をつくる

dict.fromkeys()メソッド

辞書(dict): dict.fromkeys( イテレータ, 初期値 ) ———-➀

dictクラスのfromkeysメソッドで、初期値を指定して辞書をつくれます。

キーはリストや文字列などのイテレータで指定し、初期値は一つだけ指定できます。

Python 公式ドキュメント dict.fromkeys()メソッド

https://docs.python.org/ja/3/library/stdtypes.html?highlight=fromkeys#dict.fromkeys

例1 次は「キー」のイテレータをリストにした例です。

実行結果から(➀)、リストの要素ひとつひとつがキーとなり、第2引数の”123″で値が初期化された、辞書が作成されました。(②)


result = dict.fromkeys( ['key1', 'key2', 'key3'], 123 )

print(result)               #➀ {'key1': 123, 'key2': 123, 'key3': 123}
print(type(result))         #➁ <class 'dict'>
#-------------------------------------------

次は「キー」のイテレータをタプルにした例です。

同様に辞書が作成されました。(②)

result = dict.fromkeys( ('key1', 'key2', 'key3'), 123 )

print(result)               #➀ {'key1': 123, 'key2': 123, 'key3': 123}
print(type(result))         #➁ <class 'dict'>
#-------------------------------------------

「キー」に文字列を指定することもできます。

その場合は、一文字づつに分解されそれぞれが「キー」となります。また、第2引数を省略すると値なし” None ”として初期化されます。

result = dict.fromkeys( 'ABC' )

print(result)               #➀ {'A': None, 'B': None, 'C': None}
print(type(result))         #➁ <class 'dict'>
#-------------------------------------------

2.  辞書の更新/追加と削除

ミュータブルなデータ構造である辞書は「キー:値」を変更/追加し、要素を削除することができます。これらの操作は対象の「キー」を指定することでおこなえます。

辞書の更新・追加と削除

辞書(dict)

  • 更新と追加   : 辞書名[キー]= 値  ———-➀
  • 削除(要素指定) : del 辞書名[キー]  ———-②
  • 削除(全要素)  : 辞書名.clear    ———-③

Python 公式ドキュメント

https://docs.python.org/ja/3/library/stdtypes.html?highlight=fromkeys#dict

2.1 辞書の更新と追加

辞書の更新と追加について解説します。


例1.既存の辞書の値を変更(更新)するには、➁、➂のように

「辞書名[キー]= 新値」といったように、値を変更したいキーを指定し、新値を代入することで可能となります。

更新の場合は、キーは既存のものを指定する必要があります。

result = { 'key1' : 1, 'key2' : 2, 'key3' : 3 }
print(result)   #➀ {'key1': 1, 'key2': 2, 'key3': 3}

# キー(key1)の値を10に更新する
result['key1'] = 10
print(result)   #➁ {'key1': 10, 'key2': 2, 'key3': 3}

# キー(key3)の値を30に更新する
result['key3'] = 30
print(result)   #➂ {'key1': 10, 'key2': 2, 'key3': 30}
#------------------------------------------------------

新しい「キーと値」を追加したい場合も、上の更新と同じ要領でおこないます。

追加の場合は、新規の「キー」を指定します。次の➃の例は ‘key4’という新キーに、

40という値を追加しています。

# キー(key4)の値を30に追加する
result['key4'] = 40
print(result)   #➃ {'key1': 10, 'key2': 2, 'key3': 30, 'key4': 40}
#------------------------------------------------------

2.2 辞書の要素の削除

辞書の要素の削除について解説します。


例1.辞書から要素を個別に指定して削除するには、「 del 」ステートメントを使います。「 del 辞書名[ 対象キー ] 」 といったように書きます。

次の例では、もともとの①の辞書から、➁で’key1’キー、➂で’key2’キーを指定して対応する値とセットで削除しています。

result = { 'key1' : 1, 'key2' : 2, 'key3' : 3 }
print(result)       #➀ {'key1': 1, 'key2': 2, 'key3': 3}

del result['key1']
print(result)       #➁ {'key2': 2, 'key3': 3}  キー(key1)と対応する値が削除される

del result['key2']
print(result)       #➂ {'key3': 3}  キー(key2)と対応する値が削除される
#------------------------------------------------------

また、当然ですが存在しない「キー」を指定して削除しようとしても、エラーが発生します。➃では削除済みの ‘ key1 ‘を指定していますが、” KeyError ”が発生しています。

del result['key1']
print(result)       #➃ KeyError: 'key1'
#------------------------------------------------------

例2.辞書のclear()メソッドを使うことで、要素をすべて一度にクリアするこも可能です。➁のように「 辞書名.clear() 」とすることで空の辞書になることを確認できます。

result = { 'key1' : 1, 'key2' : 2, 'key3' : 3 }
print(result)       #➀ {'key1': 1, 'key2': 2, 'key3': 3}

result.clear()
print(result)       #➁ {} 全ての要素が削除され、空の辞書となる
#------------------------------------------------------

以上が辞書の更新/追加と削除の解説でした。

3. まとめ

 最後に、この記事のまとめになります。

  • 辞書は「キー」と「値」がペアになったデータ構造である
  • 辞書の要素には順番がなく、インデックスはない
  • 要素の指定には、「キー」をつかう

最後までお読み頂きありがとうございました。

次の記事では、「<辞書②>参照方法・使い方」について解説します。

タイトルとURLをコピーしました