logo

Python の Defaultdict

ディクショナリは、マップなどのデータ値を格納するために使用される Python のデータ値の順序なしのコレクションです。ディクショナリは、他のデータ型のように単一の値を要素として保持するのではなく、キーと値のペアを保持します。ディクショナリに実装されるキーは一意かつ不変である必要があります。つまり、Python タプルをキーにすることはできますが、Python リストをディクショナリ内のキーにすることはできません。一連の要素を中括弧 {} 内に配置することで辞書を作成できます。値はカンマ「,」で区切ることができます。

例 1:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 1: ', Dict_1[1]) print ('key pair 3: ', Dict_1[3]) 

出力:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} key pair 1: A key pair 3: C 

しかし、5 番目のキー値を出力しようとすると、エラーが発生します。 '辞書_1' 5 番目のキー値が含まれていません。

例 2:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 5: ', Dict_1[5]) 

出力:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} --------------------------------------------------------------------------- KeyError Traceback (most recent call last) in 2 print ('Dictionary: ') 3 print (Dict_1) ----> 4 print ('key pair 5: ', Dict_1[5]) KeyError: 5 

いつでも キーエラー という問題が発生すると、ユーザーにとって問題になる可能性があります。このエラーは、Python の別の辞書 (として知られるコンテナのようなもの) を使用することで克服できます。 デフォルトディクショナリ 。ユーザーはこの辞書を次の場所で見つけることができます。 「コレクション」 モジュール。

デフォルトディクショナリ

defaultdict は Python の辞書であり、「collections」モジュール内に存在するコンテナのようなものです。これは、辞書のようなオブジェクトを返すために使用される辞書クラスのサブクラスです。 defaultdict とdictionary はどちらも同じ機能を持ちます。ただし、defaultdict は、ユーザーが作成した辞書には存在しないキーのデフォルト値を提供するため、KeyError を発生させません。

構文:

 defaultdict(default_factory) 

パラメーター:

    デフォルト_ファクトリー:default_factory() 関数は、ユーザーが定義した辞書に対してユーザーが設定したデフォルト値を返します。この引数が存在しない場合、辞書は KeyError を発生させます。

例:

 from collections import defaultdict as DD # Function for returning a default values for the # keys which are not present in the dictionary def default_value(): return 'This key is not present' # Now, we will define the dict dict_1 = DD(default_value) dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key pair 1: ', dict_1['ABC']) print ('key pair 3: ', dict_1['GHI']) print ('key pair 5: ', dict_1['MNO']) 

出力:

 Dictionary: defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4}) key pair 1: 1 key pair 3: 3 key pair 5: This key is not present 

defaultdict の内部動作

defaultdict を使用すると、標準の辞書操作に加えて、追加の書き込み可能なインスタンス変数と 1 つのメソッドが得られます。書き込み可能なインスタンス変数は、default_factory パラメータであり、 __ない__ という方法です。

    デフォルト_ファクトリー:default_factory() 関数は、ユーザーが定義した辞書に対してユーザーが設定したデフォルト値を返します。

例:

 from collections import defaultdict as DD dict_1 = DD(lambda: 'This key is not present') dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key value 1: ', dict_1['ABC']) print ('key value 3: ', dict_1['GHI']) print ('key value 5: ', dict_1['MNO']) 

出力:

 Dictionary: defaultdict(<function at 0x0000019efc4b58b0>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: 1 key value 3: 3 key value 5: This key is not present </function>
    __ない__():__missing__() 関数は、辞書にデフォルト値を提供するために使用されます。 __missing__() 関数は、default_factory を引数として受け取ります。引数が None に設定されている場合、KeyError が発生します。それ以外の場合は、指定されたキーのデフォルト値が提供されます。このメソッドは基本的に次のメソッドによって呼び出されます。 __getitem__() 要求されたキーが見つからない場合の dict クラスの関数。 __getitem__() 関数は、__missing__() 関数内に存在する値を生成または返します。

例:

データ構造 Java
 from collections import defaultdict as DD dict_1 = DD(lambda: &apos;This key is not present&apos;) dict_1[&apos;ABC&apos;] = 1 dict_1[&apos;DEF&apos;] = 2 dict_1[&apos;GHI&apos;] = 3 dict_1[&apos;JKL&apos;] = 4 print (&apos;Dictionary: &apos;) print (dict_1) print (&apos;key value 1: &apos;, dict_1.__missing__(&apos;ABC&apos;)) print (&apos;key value 4: &apos;, dict_1[&apos;JKL&apos;]) print (&apos;key value 5: &apos;, dict_1.__missing__(&apos;MNO&apos;)) 

出力:

 Dictionary: defaultdict(<function at 0x0000019efc4b5670>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: This key is not present key value 4: 4 key value 5: This key is not present </function>

「List」をdefault_factoryとして使用する方法

リスト クラスをdefault_factory引数として渡すと、リスト形式で設定された値を含むdefaultdictが作成されます。

例:

 from collections import defaultdict as DD # Defining a dictionary dict_1 = DD(list) for k in range(7, 12): dict_1[k].append(k) print (&apos;Dictionary with values as list:&apos;) print (dict_1) 

出力:

 Dictionary with values as list: defaultdict(, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]}) 

「int」をdefault_factoryとして使用する方法

int クラスをdefault_factory引数として渡すと、デフォルト値がゼロに設定されたdefaultdictが作成されます。

例:

 from collections import defaultdict as DD # Defining the dict dict_1 = DD(int) J = [1, 2, 3, 4, 2, 4, 1, 2] # Now, we will iterate through the list &apos;J&apos; # for keeping the count for k in J: # As, The default value is 0 # so we do not need to # enter the key first dict_1[k] += 1 print(dict_1) 

出力:

 defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2}) 

結論

このチュートリアルでは、Python の defaultdict と、default_factory パラメーターを使用して、defaultdict でさまざまな操作を実行する方法について説明しました。