10

これが defaultdict の仕組みです。

from collections import defaultdict
a=defaultdict(lambda:3)
a[200]==3 #True

defaultdict単純な定数値ではなく、引数のない関数を取るように設計されたのはなぜですか?


これが別の定義です。

class dd(dict):
    def __init__(self,x):
        self._default=x
    def __getitem__(self,key):
        if key in self: return dict.__getitem__(self, key)
        else:
            self[key]=self._default
            return self[key]

となることによって

a=dd(3)
a[200]==3 #True
4

1 に答える 1

15

デフォルト値を変更可能なオブジェクトにしたい場合は、おそらくキーごとに異なる変更可能なオブジェクトにしたいからです。

定数を渡して を実行するとdefaultdict([])、欠落しているキーがアクセスされるたびに、その値が同じリストに設定されます。次に、これを取得します:

>>> d = defaultdict([])
>>> d[1].append("Whoops")
>>> print d[2]
["Whoops"]

変更可能なデフォルト値を持つことは、実際には非常に一般的で便利です。d[key].append("Blah")最初に存在を確認する必要なく、次のようなことができるからですd[key]。この場合、毎回新しい値を返す何らかの方法が必要です。これを行う最も簡単な方法は、デフォルト値を返す callable を用意することです。

于 2013-09-14T02:48:33.477 に答える