Pythonで辞書にキーが存在していなければキーと値を新たに追加する方法


dictionary

photo credit: grits2go New York Public Library via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者&Windowsユーザー向けに、Pythonで辞書を使った集計ツールの作り方をお伝えしています。

前回の記事はコチラです。

Pythonで辞書をforループするkeysメソッド・valuesメソッド・itemsメソッドの使い方
非エンジニア&Windowsユーザー向けにPythonで辞書を使った便利な集計ツールの作り方をお伝えしております。Pythonで辞書をforループするkeysメソッド・valuesメソッド・itemsメソッドの使い方です。

辞書に対してforループで繰り返し処理をする方法をお伝えしました。

ところで、リストの値についてその登場回数をカウントするツールを作っているわけですが、辞書のキーとして存在していない値が登場してしまったときはどうしましょうか…?

今回は、その点を解決していきたいと思います。

つまり、辞書に指定したキーが存在するかどうかを判定して、存在しなければ辞書のキーとして追加をするという処理が必要になります。

では、Pythonで辞書にキーが存在しているかを判定する方法です。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

では、まず前回のおさらいからです。

作成したスクリプトはコチラです。

onigiris = ['シャケ', 'ツナ', 'ツナ', 'コンブ', 'シャケ', 'オカカ', 'シャケ', 'ツナ', 'コンブ', 'シャケ']
count = {'シャケ': 0, 'ツナ': 0 ,'コンブ': 0, 'オカカ': 0}
for onigiri in onigiris:
    count[onigiri] +=1
for key, value in count.items():
    print('{}: {}'.format(key, value))

リストを走査しておにぎりの種類ごとにその登場回数を調べるというものです。

今回、2行目を以下のように、空の辞書の定義に変更しちゃいます。

count = {}

それで、そのまま実行すると以下のように「シャケ」がないよなどと怒られてしまいます。

Pythonで存在しないキーを操作しようとしたエラー

KeyError: ‘シャケ’

これをうまく動くように修正していきましょう。

キーが存在するか判定するif文

判定文なのでif文が使えそうですよね。

Pythonで条件分岐をする基本中の基本!if~else文の作り方
初心者向けにフォルダ作成ツールを題材としてPythonプログラミングの基本を学んでいます。今回はPythonで条件式による条件分岐をする基本中の基本、if~else文を使う方法をお伝えします。

それで、辞書に特定のキーが含まれているかどうかは、以下の構文で判定をすることができます。

if キー in 辞書.keys():
 # 処理

not演算子で条件式を反転する

ですから、今回の場合は

  • 辞書countのキーにおにぎりの種類が含まれていなければ
    • 新たにキーを追加して、その値を1にする

とすればよいわけです。

今回は「含まれていない」ですので、not演算子を使って

if キー not in 辞書.keys():
 # 処理

とします。

キーが含まれていなければ追加するスクリプト

スクリプトとしては以下のようになります。

onigiris = ['シャケ', 'ツナ', 'ツナ', 'コンブ', 'シャケ', 'オカカ', 'シャケ', 'ツナ', 'コンブ', 'シャケ']
count = {}
for onigiri in onigiris:
    if onigiri not in count.keys():
        count[onigiri] = 0
    count[onigiri] +=1
for key, value in count.items():
    print('{}: {}'.format(key, value))

これにて、以下のようにバッチリ集計が可能になります。

Pythonでリストの集計をした結果

setdefaultメソッドでキーが存在しない場合のみ追加する

ですが、実はPython。

辞書にキーが存在しないときにのみキーと値のペアを新規追加するという、なんともアメージングなメソッドがあるのです。

以下のsetdefaultメソッドです。

辞書.setdefault(キー, 値)

前述のスクリプトの

if onigiri not in count.keys():
    count[onigiri] = 0

という部分を、1行で表現できてしまうということになります。

setdefaultメソッドを使用したスクリプト

setdefaultメソッドを使ってスクリプトを書き換えると、以下のようになります。

onigiris = ['シャケ', 'ツナ', 'ツナ', 'コンブ', 'シャケ', 'オカカ', 'シャケ', 'ツナ', 'コンブ', 'シャケ']
count = {}
for onigiri in onigiris:
    count.setdefault(onigiri, 0)
    count[onigiri] +=1
for key, value in count.items():
    print('{}: {}'.format(key, value))

ネストが減るのはありがたいですよね。

まとめ

以上、Pythonで辞書にキーが存在するか判定する方法、存在していなときにキーを新たに追加する方法についてお伝えしました。

  • if文で辞書に指定したキーが存在するか判定をする
  • not演算子を使って「含まれない」を判定する
  • setdefaultメソッドでキーが存在していないときにキーと値を追加する

さて、次回は集計対象をリストではなくて、csvファイルにしたいと思います。

Pythonでcsvファイルのデータを辞書データとして集計する簡単なプログラム
初心者&Windowsユーザー向け、Pythonで辞書を使った集計ツールの作り方をお伝えしています。今回はPythonでcsvファイルのデータを辞書として集計する方法です。next関数も使いますよ。

どうぞお楽しみに!

連載目次:初心者向けPythonで辞書を使った集計ツールの作り方

Pythonの「辞書」を使うことで、カウントや計算などの集計作業を簡単に行うことができます。本シリーズでは、辞書とは何かというところから実際にcsvファイルを集計するツールを作るところまでを伝えしていきます。

  1. Pythonでリストの値をカウントをする超簡単なプログラム~辞書とは何か、またその使い方
  2. Pythonで辞書をforループするkeysメソッド・valuesメソッド・itemsメソッドの使い方
  3. Pythonで辞書にキーが存在していなければキーと値を新たに追加する方法
  4. Pythonでcsvファイルのデータを辞書データとして集計する簡単なプログラム

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