PYTHON MEBY

Pythonでdefaultdictを使う(collections.defaultdict)

この記事では、Pythonのcollectionsモジュールにあるdefaultdictについて、その使用方法と利点を解説します。特に辞書型のデータ構造を扱う際に役立つdefaultdictの使い方を、具体的なコード例とともに説明します。

目次

defaultdictとは?

collections.defaultdictは、通常のdictと同様にキーと値のペアを保存するデータ構造ですが、キーが存在しない場合にデフォルト値を自動的に生成する点が異なります。これにより、キーの存在チェックを明示的に行う必要がなくなり、コードを簡潔で読みやすくすることができます。

from collections import defaultdict

# int型のデフォルト値を持つdefaultdictを作成
my_dict = defaultdict(int)

# キーが存在しない場合、デフォルト値0が自動的に生成される
my_dict['a'] += 1
my_dict['b'] += 2

print(my_dict)  # 出力: defaultdict(<class 'int'>, {'a': 1, 'b': 2})

上記の例では、int型をデフォルト値として指定しています。デフォルト値には、int、str、list、set、dictなど、任意の型を指定できます。

defaultdictの使いかた

defaultdictを使うと、キーの存在チェックをせずに値を追加することができます。通常のdictでは、キーが存在しない場合にKeyErrorが発生しますが、defaultdictではデフォルト値が生成されるため、エラーが発生しません。

from collections import defaultdict

# list型のデフォルト値を持つdefaultdictを作成
my_dict = defaultdict(list)

my_dict['a'].append(1)
my_dict['a'].append(2)
my_dict['b'].append(3)

print(my_dict)  # 出力: defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3]})

リストだけでなく、他のデータ構造をデフォルト値として使うことも可能です。

defaultdictと通常のdictの違い

通常のdictとdefaultdictの最も大きな違いは、キーが存在しない場合の挙動です。通常のdictではKeyErrorが発生しますが、defaultdictではデフォルト値が自動的に生成されます。この違いにより、defaultdictはデータの集計や処理を簡潔に記述できるため、多くの場面で便利です。

from collections import defaultdict

# 通常のdict
my_dict = {}
try:
    my_dict['a'] += 1
except KeyError:
    my_dict['a'] = 1

# defaultdict
my_defaultdict = defaultdict(int)
my_defaultdict['a'] += 1

print(my_dict)      # 出力: {'a': 1}
print(my_defaultdict) # 出力: defaultdict(<class 'int'>, {'a': 1})

よくある例:カウンターの作成

defaultdictは、単語の出現回数を数えるカウンターを作成する際に非常に便利です。

from collections import defaultdict

text = "apple banana apple orange banana apple"
word_counts = defaultdict(int)

for word in text.split():
    word_counts[word] += 1

print(word_counts)  # 出力: defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})

まとめ

defaultdictは、キーが存在しない場合にデフォルト値を自動的に生成する便利なデータ構造です。特に、データの集計や処理を行う際に、コードを簡潔で読みやすくすることができます。様々なデフォルト値を指定できるので、柔軟に利用できます。

関連記事