defaultdict
bagus ketika nilai defaultnya statis, seperti daftar baru, tetapi tidak terlalu banyak jika itu dinamis.
Sebagai contoh, saya perlu kamus untuk memetakan string ke int unik. defaultdict(int)
akan selalu menggunakan 0 untuk nilai default. Juga,defaultdict(intGen())
selalu menghasilkan 1.
Sebagai gantinya, saya menggunakan dict biasa:
nextID = intGen()
myDict = {}
for lots of complicated stuff:
#stuff that generates unpredictable, possibly already seen str
strID = myDict.setdefault(myStr, nextID())
Catatan yang dict.get(key, nextID())
tidak mencukupi karena saya harus dapat merujuk ke nilai-nilai ini nanti.
intGen
adalah kelas kecil yang saya bangun yang secara otomatis menambah int dan mengembalikan nilainya:
class intGen:
def __init__(self):
self.i = 0
def __call__(self):
self.i += 1
return self.i
Jika seseorang memiliki cara untuk melakukan ini dengan defaultdict
saya ingin melihatnya.