2017-01-01 9 views
0

私はPythonでdefaultdictを試しています。コードは以下の通りである:python defaultdict lambda

dd = defaultdict(lambda :[0,0]) 
dd[5][4] = 2 
print(dd) 

をしかし、それははIndexErrorに

IndexError: list assignment index out of range 

をスローし、私は

dd[2][1] = 2 

にコードを変更すると、結果は次のとおりです。

defaultdict(<function <lambda> at 0x000001F9F10EE730>, {2: [0, 2]}) 

私は索引が走っていない理由を知らない範囲とはどのようになっていますか?

ありがとうございます!あなたのdefaultdict

答えて

3

は予想通りdefaultdict[0,0]値を生成し、存在しないキー5以来、

あなたがdd[5][4] = 2を行う2の長さを持つデフォルトのエントリを生成します。あなたが範囲外にある第五インデックス、アクセスしている次に

(あなたがしたいように[0,0][4] = 2

た場合(1は、デフォルトのリスト範囲内にあるので、もちろんそれはdd[2][1] = 2で動作します)あなたのリストのサイズがわからないと、あなたが知られたくない、私はこのように、整数のデフォルトの辞書にデフォルトの辞書を使用することをお勧め:ないこと

dd = defaultdict(lambda : defaultdict(int)) 

(もちろんaを生成するrrayではなく、dictsのdictであるが、dd[5][4]構成はすぐに機能する)