パイソン |リストの辞書を作成する方法

これまで、Python で複数の方法で辞書を作成する方法と、キーと値に対するさまざまな操作を見てきました。 辞書 。次に、リストの辞書を作成するさまざまな方法を見てみましょう。キーによる制限があることに注意してください。 パイソン Dictionary はキーとして使用できるのは不変のデータ型のみです。つまり、リストのディクショナリをキーとして使用することはできません。

:

  Input:   myDict = {}  myDict['key1'] = [1, 2] # Adding list as value  myDict['key2'] = ['Geeks', 'For', 'Geeks']    Output:   {'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}    Explanation:   In the output, we have a dictionary of lists. 

問題文

通常の方法で実装しようとすると、一般的に typrerror が発生します。

Python3




# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)>

出力:

TypeError: unhashable type: 'list' 

しかし、辞書内の値を使用して同じことを非常に賢明に行うことができます。リストの辞書を作成するさまざまな方法をすべて見てみましょう。

リストの辞書を作成する方法

この記事で取り上げるトピックは次のとおりです。

添え字を使用してリストの辞書を作成する

このコードは空のオブジェクトを初期化します。 辞書 myDict> 。次に、2 つのキーと値のペアを辞書に追加します。 'key1'> 値と一緒に [1, 2]> 、 そして 'key2'> 値と一緒に ['Geeks', 'For', 'Geeks']> 。最後に、コードは辞書の内容を出力します。

Python3




# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> myDict[> 'key2'> ]> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> print> (myDict)>

出力:

{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} 

時間計算量: 辞書の挿入と辞書の印刷ごとに O(1)。
補助スペース: O(n)。n は辞書内の要素の総数です。

append() メソッドを使用してリストの辞書を作成する

ネストされたリストを値として追加するには、 append()メソッド。 新しいリストを作成すると、そのリストを値に追加するだけです。

Python3




# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> # creating a list> lst> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> # Adding this list as sublist in myDict> myDict[> 'key1'> ].append(lst)> print> (myDict)>

出力:

{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]} 

時間計算量: ○(1)。
補助スペースの複雑さ: の上)。

setdefault() メソッドを使用してリストの辞書を作成する

リストを繰り返し、指定された範囲まで要素を追加し続けます。 setdefault() メソッド。

Python3




# Creating an empty dict> myDict> => dict> ()> # Creating a list> valList> => [> '1'> ,> '2'> ,> '3'> ]> # Iterating the elements in list> for> val> in> valList:> > for> ele> in> range> (> int> (val),> int> (val)> +> 2> ):> > myDict.setdefault(ele, []).append(val)> print> (myDict)>

出力:

{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']} 

時間計算量 : O(n^2)
空間の複雑さ : の上)

リスト内包表記を使用したリストの辞書の作成

リストの内包表記 値を反復処理します '1'> '2'> 、 そして '3'> 、値ごとに、辞書内にキーと値のペアが作成されます。キーは現在の値で、値は整数に変換された値から始まり、値に 1 を加えた値で終わる整数の範囲です。

パイソン




# Creating a dictionary of lists using list comprehension> d> => dict> ((val,> range> (> int> (val),> int> (val)> +> 2> ))> > for> val> in> [> '1'> ,> '2'> ,> '3'> ])> print> (d)>

出力:

{'1': [1, 2], '3': [3, 4], '2': [2, 3]} 

時間計算量: ○(1)。
補助スペースの複雑さ: の上)。

defaultdictを使用してリストの辞書を作成する

インポートする デフォルトディクショナリ コレクションモジュールのクラス。まず、各タプルにキーと値のペアが含まれるタプルのリストを定義します。空のリストのデフォルト値を持つ orDict という名前のdefaultdictオブジェクトを作成します。まず for ループを使用してタプルのリストを反復処理し、各タプルを key 変数と val 変数に解凍します。 orDict ディクショナリ内のキーに関連付けられたリストに値 val を追加します。

結果の辞書または Dict 辞書を印刷します。

注記 : 同じことを単純な辞書でも行うことができますが、そのような場合には、defaultdict を使用する方が効率的です。

Python3




from> collections> import> defaultdict> lst> => [(> 'Geeks'> ,> 1> ), (> 'For'> ,> 2> ), (> 'Geeks'> ,> 3> )]> orDict> => defaultdict(> list> )> # iterating over list of tuples> for> key, val> in> lst:> > orDict[key].append(val)> print> (orDict)>

出力:

defaultdict(, {'For': [2], 'Geeks': [1, 3]}) 

時間計算量: O(n)。
補助スペース: O(n)。

出力辞書にはキーと値のペアが 2 つしかありませんが、入力リストには 3 つのタプルが含まれていることに注意してください。最初の要素 (つまりキー) は最初と 3 番目のタプルで同じであり、2 つのキーが同じになることはありません。

Jsonを使用したリストの辞書の作成

インポートすることで、 json> モジュール。リストを初期化します lst> タプルが含まれています。次に、空の辞書 dict> 初期化されます。コードはリストを変換します lst> JSON 形式の文字列に変換する を使用して json.dumps()> 、そしてこの文字列を辞書のキーとして割り当てます dict> 値が変換された状態。最後に、辞書が印刷されます。

Python3




#importing json> import> json> #Initialisation of list> lst> => [(> 'Geeks'> ,> 1> ), (> 'For'> ,> 2> ), (> 'Geeks'> ,> 3> )]> #Initialisation of dictionary> dict> => {}> #using json.dump()> hash> => json.dumps(lst)> #creating a hash> dict> [> hash> ]> => 'converted'> #Printing dictionary> print> (> dict> )>

出力:

{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'} 

時間計算量: O(n)。n はリスト lst の長さです。
補助スペース: O(n)。n はリスト lst の長さです。

を使用してリストの辞書を作成する イターツール

1 つのアプローチは、次の zip_longest 関数を使用することです。 itertools モジュール。 この関数を使用すると、2 つ以上の反復可能オブジェクトを並行して反復し、欠落している要素を指定されたフィル値で埋めることができます。

Python3




from> itertools> import> zip_longest> # Initialize the lists> list1> => [> 1> ,> 2> ,> 3> ]> list2> => [> 10> ,> 20> ,> 30> ,> 40> ]> list3> => [> 'a'> ,> 'b'> ,> 'c'> ,> 'd'> ,> 'e'> ]> # Use zip_longest to iterate over the lists in parallel> d> => {}> for> elem1, elem2, elem3> in> zip_longest(list1, list2, list3, fillvalue> => 0> ):> > d.setdefault(elem1, []).append(elem2)> > d.setdefault(elem1, []).append(elem3)> print> (d)> # Output: {1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd']}>

出力

{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']} 

時間計算量: O(n)。n は最長リストの長さです。
補助スペース: の上)