2012-02-10 10 views
1

を得ることが、私はそれを設定したときに、私はcollections.defaultdictリターンデフォルト構築されたオブジェクトにすることができます任意の方法がある場合に設定ではなく、デフォルトを使用...Pythonの `defaultdict`:

foo = defaultdict(list) 
foo[3].append('dsafdasf') 

...ではなく、私はそれにアクセスしようとすると?

try: 
    for word in foo[None]: 
     print(word) 
except KeyError: 
    pass 

答えて

8

私はあなたが探しているものは、このようなものであることを考えます不足しているキーに対して例外を発生させる必要がある場合は、アイテムアクセスを使用します。

3

いいえ、「設定する」という例は、実際には未使用のスロットを取得するための例です。

代わり collections.defaultdictを使用しての、ある
>>> foo = {} 
>>> foo.setdefault(3, []).append('dsafdasf') # Appends to default value 
>>> foo[None] # Raises a KeyError exception 

、あなたが定期的に辞書を使用してデフォルトを割り当てるために必要がある場合setdefaultメソッドを使用することができます。

+0

私は、Pythonに '__getitem__'と' __setitem__'関数があるのでこれが可能かもしれないと思いました。 –

+3

@PaulMantaそれは両方を持っていますが、ここでは '__getitem__'だけが使用されています。あなたの例で 'foo [3]'と 'foo [None]'はどちらもdictエントリにアクセスしています。 'foo [3] = ...'のようなものだけを実行すると '__setitem__'が呼び出されます。 – lvc

関連する問題