python入門講座 | dict型の使い方5(要素を削除する方法)[第32回]

アラサーOLのためのpython入門講座
dict型では要素を削除してもkeyと値の対応関係は不変です。

Ciao!みなさんこんにちは!このブログでは主に
(1)pythonデータ解析,
(2)DTM音楽作成,
(3)お料理,
(4)博士転職
の4つのトピックについて発信しています。

今回は「アラサーOLのためのpython入門講座」です!この講座では、プログラミング初心者アラサーOLのMi坊さんに、pythonを学習する上でのアドバイスを行います!「パソコンもプログラミングも初心者だけど、プログラミングができるようになりたい!」という方のためにstep-by-stepで解説していきます。

今日はdict型(=辞書型)変数の要素を削除する方法を解説します。dict型の要素は「del 変数[key]」という形で削除することができます。この記事を読めば、dist型変数の要素を削除する方法を知り、pythonプログラミングの知識を深めることができます。ぜひ最後までお付き合いください!

Kaiko
Kaiko

この記事はこんな人におすすめ

  • 初心者だけどpythonを始めた!
  • pythonの基本的な使い方を知りたい!
  • 独学で学んだpythonの知識を整理したい!

Abstract | key指定してdelで削除

dict型変数の要素は、削除したい要素をkeyで指定してdelで削除することができます。dict型では要素を削除してもkeyと値の対応関係は変わりません。これはdict型に格納された要素の順番に意味がないためです。list型では、要素を削除すると順番が一つ「詰められる」ので、indexと値の対応関係が変化します。実際のプログラミングの場面でdict型の要素を削除することはあまりありません。しかし、dict型とlist型の違いなどの理解を深める上で、dict型の要素の削除について知っておくことは役立ちます。



Background | dict型(辞書型)の概要

dict型はlist型と同様、一つの変数に複数の値を格納することができる変数の型です。日本語では「辞書型」と呼ばれますが、本稿ではdict型と呼びます。dict型は、複数の値を格納することができる配列タイプの変数の中では、格納できる値の数やtypeが自由に設定できる柔軟な変数です。
配列タイプの変数の種類と特徴についてはこちらの記事を参照ください→「python入門講座 | 配列タイプ変数の種類と特徴(リスト, NumPy配列, DataFrameなど)」。

dict型の主な特長は

  1. keyを使って値を格納、参照できる (list型と異なる)
  2. どんな型の値や変数でも格納できる (list型と同じ)

の2つです。list型と異なり、格納された値の順番に意味はないため、どの位置にどの値が入っているかを覚えておく必要がありません。わかりやすいkeyで値を格納しておけば、後でスムーズに参照することができます。dict型変数の特徴について、詳しくはこちらの記事をご参照ください→「python入門講座 | dict型の使い方1(辞書型の特長とlist型との違い)」。

今回はdict型変数の要素(格納された値)を削除する方法を解説します。dict型変数についての以下の過去記事もご覧ください!

  1. dict型変数の特長: python入門講座 | dict型の使い方1(辞書型の特長とlist型との違い)
  2. dict型変数の作成: python入門講座 | dict型の使い方2(変数を作成する方法)
  3. dict型変数の参照: python入門講座 | dict型の使い方3(要素を取り出す方法)
  4. dict型変数の更新: python入門講座 | dict型の使い方4(要素を追加・更新する方法)



Method | dict型変数の要素を更新・追加する方法

dict型変数の要素を取り出す方法を解説します。実際に手を動かしながら学んでいきましょう!Jupyter Notebookを立ち上げてコーディングしながら読み進めてください。練習問題の後にコーディング例も掲載しますので、やってみてどうしてもわからなければそれを見て進めてみてください。

準備 | python notebookの新規作成

まずはpython notebookを用意しましょう。いつものpython_practiceのディレクトリに「practice_dict_delete」という名前のpython notebookを作成してください。ターミナルを立ち上げて~/python_practiceに移動、jupyter notebookを起動し、ブラウザから新規→Python3でpython notebookを開いて、ファイル→リネームでファイル名を決定します。
もしやり方がわからなければ、過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」で詳しく解説しているので、これを見ながらやってみてください。

python notebookを起動したら、適宜Markdownセルに説明書きを加えながら下記の説明に沿ってコードを書いて実行していきましょう。Markdownセルやコードセルなどの用語やこれらの使い方についても、過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」を参照してください。練習問題の後にpython notebookの例を掲載します。もし書き方がわからなければそちらを見てください。



dict型変数の要素を削除する方法 | delで要素ごとに削除

dict型変数の要素は

del 変数名[key]

という形で削除します。Keyで要素を指定することで、その要素だけを削除することができます。もし要素を指定せず

del 変数名

としてしまうと、変数自体が削除されてしまうので注意してください。

dict型変数の要素を削除する例

dict型変数の要素を削除してみましょう。以下のように、国名をkey、首都名を値とした変数の要素を削除してください。

# define a dict variable
capital_cities = {'Japan': 'Tokyo', 'France': 'Paris', 'Germany': 'Berlin'}

# delete  japan
del capital_cities['Japan']
print(capital_cities)

実行すると、

{'France': 'Paris', 'Germany': 'Berlin'}

と出力されます。この例では変数名が「capital_cites」、keyが国名なので

del capital_cites[国名]

として要素を削除します。

削除された要素の参照 → エラー

削除された要素を参照しようとすると、当然エラーとなります。以下のコードを実行して確認してみましょう。

# print Japan -> Error
print(capital_cities['Japan'])

実行すると

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/var/folders/cc/zd_rdmgn14z8hw956cpfjt480000gn/T/ipykernel_48997/2366083649.py in <module>
      1 # print Japan -> Error
----> 2 print(capital_cities['Japan'])

KeyError: 'Japan'

と出力されます。「’Japan’というkeyは存在しないよ」というエラーです。

Key指定せずdel | 変数自体が削除される

ついでにkey指定しない場合の挙動も見てみましょう。以下のようにkey指定をせずdelを使ってみましょう。

# delete the variable
del capital_cities
print(capital_cities)

これを実行すると

NameError                                 Traceback (most recent call last)
/var/folders/cc/zd_rdmgn14z8hw956cpfjt480000gn/T/ipykernel_35125/1837268281.py in <module>
      1 # delete the variable
      2 del capital_cities
----> 3 print(capital_cities)

NameError: name 'capital_cities' is not defined

というようにエラーとなります。print文で出力しようとしたときには、すでにdelで変数自体が削除されています。そのため変数が見つからないというエラーとなります。



int型をkeyとする場合の例 | list型の要素削除との比較

int型をkeyとする場合、要素の参照はlist型のときとそっくりでした(過去記事「python入門講座 | dict型の使い方3(要素を取り出す方法)」参照)。ところが、要素を削除するときの挙動はlist型とは異なります。

dict型では要素削除してもkeyと値の対応関係は不変

dict型の場合、要素を削除してもkeyと値の対応関係は変わりません。例を見てみましょう。以下を実行してみてください。

# define a dict variable with int-type keys
eva_pilots = {0:'Rei', 1:'Shinji', 2:'Aska'}

# print each element of the variable
print('Pilot for Eva-0:',  eva_pilots[0])
print('Pilot for Eva-1:',  eva_pilots[1])
print('Pilot for Eva-2:',  eva_pilots[2])

# delete Eva-1
del eva_pilots[1]
print('Eva-1 deleted')

# print each element of the variable
print('Pilot for Eva-0:',  eva_pilots[0])
print('Pilot for Eva-2:',  eva_pilots[2]) # Key here is 2 as before

この例では、key = 1の要素を削除しています。削除後でもkey = 0は’Rei’、key = 1は’Aska’という対応関係は変わりません。これを実行すると、

Pilot for Eva-0: Rei
Pilot for Eva-1: Shinji
Pilot for Eva-2: Aska
Eva-1 deleted
Pilot for Eva-0: Rei
Pilot for Eva-2: Aska

と表示されます。

list型では要素を削除するとindexと値の対応関係が変化する

次にlist型の場合をやってみましょう。list型の場合、要素を削除するとindexが「詰められる」のでindexと値の対応関係が変化します。以下の例を実行してみてください。

# define a list variable
eva_pilots = ['Rei', 'Shinji', 'Aska']

# print each element of the variable
print('Pilot for Eva-0:',  eva_pilots[0])
print('Pilot for Eva-1:',  eva_pilots[1])
print('Pilot for Eva-2:',  eva_pilots[2])

# delete Eva-1
del eva_pilots[1]
print('Eva-1 deleted')

# print each element of the variable
print('Pilot for Eva-0:',  eva_pilots[0])
print('Pilot for Eva-2:',  eva_pilots[1]) # Index here is NOT 2

最後の行で’Aska’を出力するときのindexが「2」ではなく「1」に変わったことに注目してください。「del eva_pilots[1]」でindex = 1を削除しています。ここで、もともとindex = 2の値だったAskaが一つ手前のindex = 1に移動します。そのため、要素の削除後はindex = 1が’Aska’となります。上記を実行すると

Pilot for Eva-0: Rei
Pilot for Eva-1: Shinji
Pilot for Eva-2: Aska
Eva-1 deleted
Pilot for Eva-0: Rei
Pilot for Eva-2: Aska

と表示されます。

このようにlist型では要素削除によってindexと値の対応関係が変化します。Index(key)と値の対応関係を変化させたくない場合にはdict型を使うことで解決できます。



Result | 練習問題

練習問題をやってみましょう。以下の処理を行うコードを書いてみましょう。

  1. dict型変数prefectural_capitalsを、以下のkeyと値で作成してください。
    • key1: Hokkaido, 値1: Sapporo
    • key2: Kanagawa, 値2: Yokohama
    • key3: Okinawa, 値3: Naha
  2. 変数prefectural_capitalsからkeyがKanagawaの要素を削除し、print文で変数全体を出力してください。



練習問題の回答例

練習問題の回答が完成したら回答例を確認しましょう!下の画面をスクロールすると回答例が見られます!参考にしてみてください。また、今回の記事で出てきた他のコードも載っているので参考にしてください!

練習問題おつかれさまでした!
今日はここまでです。Python Notebookを終了しておきましょう。もしPython Notebookを終了方法がわからなければ過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」の「Python Notebookの起動・終了方法」の章を参照してください!



Conclusion | まとめ

最後までご覧いただきありがとうございます!
今回はdict型変数の要素を削除する方法を解説しました。key指定した上でdelで削除することで、その要素だけを削除することができます。実際に様々なコードを書いていくことでコツを掴むことができます!pythonプログラミングのレベルアップをしていきましょう!

以上「python入門講座 | dict型の使い方5(要素を削除する方法)」でした!
またお会いしましょう!Ciao!



References | 参考

以下の教科書を参考にして進めています!より詳しく学びたい方は購入して読んでみてください!

Pythonの参考教科書

コメント

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