IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Pythonのdict​​(辞書型オブジェクト)とは?作成方法やメソッドを解説

Pythonのdictは、キーと値のペアを効率的に管理するデータ構造です。dictはPythonで重要な役割を果たし、データの格納や参照、設定ファイルの読み込みなど、色々な場面で活用されています。

本記事では、dictの基本的な概念から作成方法、基本操作、便利なメソッドの使い方まで幅広く解説し、カスタマイズした辞書型の作成方法もご紹介します。

ぜひ、明日からのプログラミングにお役立てください。

Pythonのdictとは?

Pythonのdictは、キーと値のペアを格納するデータ構造です。dictは「辞書型オブジェクト」とも呼ばれ、プログラミングで汎用的に使える便利な機能を提供します。

# 利用者の属性を格納するdictの例

user1 = {‘name’: ‘田中’, ‘age’: ’20’, ‘country’: ‘日本’, ‘occupation’: ‘ITエンジニア’}

print(user1[‘occupation’])  # user1の指定キーの値を表示する。出力: ITエンジニア

dictを使うと、関連する情報を1カ所にまとめて管理でき、コードの見通しが良くなります。

辞書型オブジェクト (dictionary object)の作成方法

辞書型オブジェクトを作成する基本的な流れを見ていきましょう。

dictを作成する

波括弧{}を使用してdictを作成するには、キーと値を:でペアにし、指定します。

my_dict = {‘apple’: 1, ‘banana’: 2, ‘orange’: 3}

※ リストは角括弧[]で初期化しますが、別物ですので注意してください。

また、dict()コンストラクタにキーワード引数を使用してキーと値のペアを指定する方法もあります。

my_dict = dict(apple=1, banana=2, orange=3) # キー名がすべてPythonの変数名として妥当な場合、タイプしやすい。

dictに初期値を設定する

簡易な初期値の設定は、前項の例のように、波括弧{}内にキーと値のペアを直接書く方法です。

kansai_prefectures = {

    “27”: “大阪府”,

    “26”: “京都府”,

    “28”: “兵庫県”,

    “25”: “滋賀県”,

    “30”: “和歌山県”

}

また、zip()関数を使用して、キーのリストと値のリストを組み合わせて辞書を作成できます。

keys = [‘apple’, ‘banana’, ‘orange’]

values = [1, 2, 3]

my_dict = dict(zip(keys, values))   # {‘apple’: 1, ‘banana’: 2, ‘orange’: 3}

fromkeys()メソッドを使用すると、複数のキーに同じ初期値を設定できます。

keys = [‘apple’, ‘banana’, ‘orange’]

my_dict = dict.fromkeys(keys, 0)    # {‘apple’: 0, ‘banana’: 0, ‘orange’: 0}

辞書型オブジェクト (dictionary object)の基本操作

dictオブジェクトに対する基本的な読み書きの方法を見ていきましょう。

要素を追加

dictに新しい要素を追加するには、直接代入とupdate()を使う方法があります。

update()メソッドは、複数の要素をまとめて追加できます。

# 直接代入

my_dict[‘new_key’] = ‘new_value’

 

# update()メソッド

my_dict.update({‘key1’: ‘value1’, ‘key2’: ‘value2’})

要素を参照

dictの要素を参照するには、角括弧[]にキーを指定します。存在しないキーはエラーになるので注意が必要です。

また、get()メソッドは、指定したキーが存在しなくてもエラーにならず便利です。

# 角括弧を使用

value = my_dict[‘key’# キーが存在しないとエラーが発生

 

# get()メソッドを使用

value = my_dict.get(‘key’, ‘規定値’) # キーが存在しない場合、規定値を返す

要素を削除

dictから要素を消すには、delまたはpop()を使用します。

# delキーワードを使用

del my_dict[‘key’# 指定キーを削除

 

# pop()メソッドを使用

value = my_dict.pop(‘key’, ‘default_value’) # 削除した要素の値を返す

要素を確認

dictにキーが存在するか調べるにはin演算子を使用します。

また、dictのキーや値のリストを一括取得するメソッドがあります。

my_dict = {‘apple’: 1, ‘banana’: 2, ‘orange’: 3}

 

if ‘banana’ in my_dict: # in演算子を使用

    print(“キーが存在します”)

 

# リストを返す keys(), values(), items()メソッドの例

print(my_dict.keys())   # [‘apple’, ‘banana’, ‘orange’] # キーのリスト

print(my_dict.values()) # [1, 2, 3] # 値のリスト

print(my_dict.items())  # [(‘apple’, 1), (‘banana’, 2), (‘orange’, 3)] # ペアのリスト

辞書型オブジェクトのメソッド

主なケース別にdictのメソッドを見ていきましょう。

指定したキーが辞書に含まれている場合

getメソッドは、キーが存在しない場合にデフォルト値を返し、エラーが発生しないので便利です。

my_dict = {‘apple’: 100, ‘banana’: 200}

price = my_dict.get(‘apple’, 0# appleの価格100を取得

not_found = my_dict.get(‘orange’, 0# orangeは存在しないので0を返す

指定したキーが辞書に含まれていない場合

setdefaultメソッドは、キーが存在しない場合に新しい要素を追加します。

setdefaultを使うと、条件分岐を書かずにキーの存在確認と値の設定を同時におこなえます。

inventory = {‘apple’: 5, ‘banana’: 3}

inventory.setdefault(‘orange’, 0# orangeが存在しないので0を設定

inventory.setdefault(‘apple’, 0)   # appleはすでに存在するので変更なし

print(inventory)    # {‘apple’: 5, ‘banana’: 3, ‘orange’: 0}

キーを指定して削除する場合

popを使うと、要素の削除と取得を1回の操作でおこなえます。

fruits = {‘apple’: 100, ‘banana’: 200, ‘orange’: 150}

price = fruits.pop(‘banana’# bananaを削除し、200を返す

not_found = fruits.pop(‘grape’, 0# grapeは存在しないので0を返す

print(fruits)   # {‘apple’: 100, ‘orange’: 150}

キーと値を削除する場合

clearメソッドは辞書の全要素を削除し、popitemメソッドは末尾の要素を削除して返します。

inventory = {‘apple’: 5, ‘banana’: 3, ‘orange’: 2}

last_item = inventory.popitem()  # (‘orange’, 2)を削除して返す

print(inventory)    # {‘apple’: 5, ‘banana’: 3}

inventory.clear()   # すべての要素を削除

print(inventory)    # {}

辞書に独自の処理をカスタムする方法

Pythonのdictオブジェクトに独自の処理を追加したい場合、collections.UserDictクラスを継承すると、辞書の動作をカスタマイズできます。

継承したクラスでは、メソッドのオーバーライドによりdictに対する値の設定・取得をカスタマイズできます。

もちろん、独自メソッド・属性の追加もできます。

例えば、大文字小文字を区別しない辞書や、アクセス回数を記録する辞書などが実現可能です。

import collections

# アクセス回数を記録する辞書の定義例

class AccessCountDict(collections.UserDict): # UserDictを継承したクラスを定義

    def __init__(self, *args, **kwargs): # コンストラクタ

        self.access_count = {} # 各キーのアクセス回数を記録する辞書を初期化

        super().__init__(*args, **kwargs) # 親クラスの初期化メソッドを呼び出し

 

    def __getitem__(self, key): # 値を取得する動作を変更

        value = super().__getitem__(key) # 親クラスの__getitem__でキーに対応する値を取得

        self.access_count[key] = self.access_count.get(key, 0) + 1 # アクセス回数を1増やす

        return value # 取得した値を返す

 

    def __setitem__(self, key, value): # 値を設定する動作を変更

        super().__setitem__(key, value) # 親クラスの__setitem__でキーと値を設定

        self.access_count[key] = self.access_count.get(key, 0) # 新規キーの場合、アクセス回数を0に設定

 

    # 独自メソッドの追加

    def get_access_count(self, key):    # 指定されたキーのアクセス回数を返す

        return self.access_count.get(key, 0)

 

    def get_all_access_counts(self):    # すべてのキーのアクセス回数をコピーして返す

        return self.access_count.copy()

 

# 使い方

d = AccessCountDict({‘a’: 1, ‘b’: 2})

print(d[‘a’])  # 1

print(d[‘b’])  # 2

d[‘c’] = 3

print(d.get_access_count(‘a’))  # 1

print(d.get_access_count(‘b’))  # 1

print(d.get_access_count(‘c’))  # 0

print(d.get_all_access_counts())  # {‘a’: 1, ‘b’: 1}

Pythonに興味をお持ちなら、資格の取得を検討してはいかがでしょうか。転職で有利なだけでなく、学習の機会にもなります。Pythonの資格は下記の記事をご覧ください。

参考記事:Python資格試験の種類とは?難易度や勉強方法を紹介

まとめ

Pythonのdictは、キーと値のペアを管理する強力なデータ構造です。

本記事では、dictの作成から、要素の追加・参照・削除などの基本操作や、便利なメソッドをご紹介しました。

ぜひ、自分のプロジェクトでdictを積極的に活用してみてください。

また、IT業界でスキルを活かした転職をお考えなら、アールストーンの無料相談をご利用ください。

IT・WEB・ゲーム業界に特化したコンサルタントがあなた専属でサポートし、企業との直接交渉もおこないます。あなたのキャリアアップを全力で支援しますので、お気軽にご相談ください。