defaultdict
辞書の値を自動的に初期化します
「defaultdict」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
存在しないキーの問題
通常のdictでは、存在しないキーにアクセスするとKeyErrorが発生します。値を少しずつ構築したい場合には不便です。
d = {}
try:
d['x'].append(1)
except KeyError as e:
print('KeyError:', e)defaultdictの登場
collectionsのdefaultdictは、存在しないキーに対するデフォルト値を生成するファクトリ関数を受け取ります。from collections import defaultdictでインポートします。
from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))intでカウントする
defaultdict(int)では、存在しないキーのデフォルト値が0になるため、最初に確認せずにインクリメントできます。
from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
counts[ch] += 1
print(dict(counts))listでグループ化する
defaultdict(list)は新しいキーに対して空のリストを作成するため、項目をグループにまとめるのに最適です。
from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
groups[w[0]].append(w)
print(dict(groups))setで収集する
キーごとに重複しない値を持たせたい場合は、defaultdict(set)を使います。重複は自動的に削除されます。
from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
seen[k].add(v)
print(dict(seen))ファクトリは呼び出し可能でなければならない
引数には、引数を取らずにデフォルト値を返す呼び出し可能オブジェクトを指定します。int、list、set、dictは、呼び出すと空の値を返すため、すべて使用できます。
from collections import defaultdict
print(int())
print(list())
print(set())lambdaでカスタムデフォルトを設定する
lambdaなど、引数を取らない任意の呼び出し可能オブジェクトを指定して、カスタムデフォルト値を返すことができます。
from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))ネストしたdefaultdict
ファクトリ自体でdefaultdictを作成することもできるため、手動で準備しなくてもネストした構造を構築できます。
from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])アクセスするとキーが作成される
注意してください。存在しないキーを単に読み取るだけで、そのキーがデフォルト値とともに挿入されます。アクセスした後は、そのキーが辞書に存在します。
from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))挿入せずに確認する
キーを作成せずに確認するには、.get()メソッドまたはin演算子を使います。これらはファクトリを呼び出しません。
from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))dictに戻す
通常の辞書が必要な場合は、defaultdictをdict()で囲みます。たとえば、関数から返す前や、きれいに表示する前に使います。
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)クイックチェック
defaultdictに渡す引数は何を表しますか?
復習:defaultdict
重要なポイント:
defaultdict(factory)は、存在しないキーに対する値を自動的に作成します。intは0(カウント用)、listは[](グループ化用)、setは空の集合(一意な値によるグループ化用)を返します。- ファクトリには、
lambdaを含む、引数を取らない任意の呼び出し可能オブジェクトを指定できます。 - 存在しないキーを読み取るとそのキーが挿入されます。安全に確認するには
.get()またはinを使います。
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
g[w[0]].append(w)
print(dict(g))よくある質問
「defaultdict」レッスンは無料ですか?
はい。「defaultdict」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「defaultdict」で何を学びますか?
辞書の値を自動的に初期化します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「defaultdict」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Counter
- defaultdict
- deque
- namedtupleとOrderedDict