2017-01-04 5 views
-1

私はPythonを学び始めています。私があなたに理解してもらえるコードがあります。Pythonでdefaultdictを使うことを理解する

from collections import defaultdict 
dd_dict = defaultdict(dict) 
dd_dict["Joel"]["City"] = "Seattle" 

結果:私はとの問題を抱えてい

{ "Joel" : { "City" : Seattle"}} 

一部は、第三のラインです。誰かが私にここで何が起こっているか説明してもらえますか?

+0

'defaultdict'は、キーが「デフォルト」の値にキーが設定されていない場合は' dict'です。あなたは基本的に辞書の辞書を持っています(3行目)。 – Abdou

答えて

1

default_factoryがNoneでない場合、それは与えられたキーのデフォルト値を提供するために、引数なしで呼び出され、この値はに挿入されていますキーの辞書に戻り、返されます。キーまだdd_dict["Joel"]部分はキー"Joel"の値として空の辞書を作成するよう"Joel"ので

は存在しません。次の部分["City"] = "Seattle"は通常のキーと値のペアを辞書に追加するのと同じです - この場合はdd_dict["Joel"]辞書です。

0

キーがアクセスされていない場合には、__missing__メソッドにアクセスします。定期dictについては

は、KeyErrordefaultdictについて

を上げて、あなたは、パラメータとして渡されたオブジェクトが作成され、アクセスされます。

defaultdict(list)を作成し、欠落しているキーにアクセスしようとすると、リストが返されます。

例:documentation of defaultdictから

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> d['missing'] 
[] 
2

3行目は、辞書を辞書の中に挿入します。デフォルトのdictでdictをデフォルト値として使用すると、新しいdd_dictの値をすべて空のdictで初期化するようにPythonに指示します。上記のコードは、

dd_dict["Joel"] = {} 
dd_dict['Joel"]["City"] = "Seattle" 

と同等です。デフォルトのdictを使用しなかった場合、2行目でキーエラーが発生します。したがって、デフォルトのdictは、データ構造のデフォルト値を初期化することによって、このようなエラーを回避する方法です。

0

終了しないdefaultdictのキーにアクセスすると、入力した関数が返すものが得られます。

>>> dict() 
{} 

>>> from collections import defaultdict 
... dd_dict = defaultdict(dict) 
... 
>>> dd_dict['Joel'] 
{} 

今、あなたはこの辞書にあなたのキーと値のペアを追加します:

>>> dd_dict["Joel"]["City"] = "Seattle" 
"Joel" : { "City" : Seattle"}} 
1

最初の引数ので、あなたは新しい空の辞書を取得し、あなたがdictを与え、あなたの場合は

、 default_factory 属性の初期値を提供します。デフォルト値はNoneです。default_factoryがNoneでない場合、 この値はキーの辞書に挿入され、返されます。 は、指定されたキーのデフォルト値を提供する引数なしで呼び出されます。あなたの場合は

dd_dict = defaultdict(dict) 
dd_dict["Joel"]["City"] = "Seattle" 

あなたがdd_dict["Joel"]を呼び出すときに、dd_dictには、このようなキーが存在しない、これはKeyError例外が発生します。 defaultdictにはこのエラーを処理するための__missing__(key)プロトコルがあり、キーが見つからない場合は引数なしでdefault_factoryを呼び出して、指定されたキーのデフォルト値を指定します。

あなたがdd_dict["Joel"]を呼び出すときに、これは、あなたが空の辞書にアイテム["City"] = "Seattle"を追加し、あなたのdict {}を与える、などのいろいろ書い:

{}["City"] = "Seattle" 
0

defaultdict(辞書)が返された辞書オブジェクトを返します。空の辞書値まだ存在しないキーとそれにあなたのインデックス場合:

>>> from collections import defaultdict 
>>> dd_dict = defaultdict(dict) 
>>> dd_dict 
defaultdict(<class 'dict'>, {}) 
>>> dd_dict["Joel"] 
{} 
>>> dd_dict["anything"] 
{} 
>>> dd_dict[99] 
{} 

に第3のラインは、キーと値のペアを作成する(「ジョエル」、{})dd_dictで、次に(設定"City"、 "Seattle")のキーと値のペア空の辞書。

それはと同等です:

>>> dd_dict = defaultdict(dict) 
>>> dd_dict["Joel"] = {} 
>>> dd_dict 
defaultdict(<class 'dict'>, {'Joel': {}}) 
>>> dd_dict["Joel"]["City"] = "Seattle" 
>>> dd_dict 
defaultdict(<class 'dict'>, {'Joel': {'City': 'Seattle'}}) 
関連する問題