defaultdict
"Kamus standar mencakup metode setdefault () untuk mengambil nilai dan menetapkan default jika nilai tidak ada. Sebaliknya, defaultdict
memungkinkan penelepon menentukan default (nilai yang akan dikembalikan) di depan ketika wadah diinisialisasi."
seperti yang didefinisikan oleh Doug Hellmann di The Python Standard Library by Example
Cara menggunakan defaultdict
Impor defaultdict
>>> from collections import defaultdict
Inisialisasi defaultdict
Inisialisasi dengan melewati
Callable sebagai argumen pertama (wajib)
>>> d_int = defaultdict(int)
>>> d_list = defaultdict(list)
>>> def foo():
... return 'default value'
...
>>> d_foo = defaultdict(foo)
>>> d_int
defaultdict(<type 'int'>, {})
>>> d_list
defaultdict(<type 'list'>, {})
>>> d_foo
defaultdict(<function foo at 0x7f34a0a69578>, {})
** kwargs sebagai argumen kedua (opsional)
>>> d_int = defaultdict(int, a=10, b=12, c=13)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})
atau
>>> kwargs = {'a':10,'b':12,'c':13}
>>> d_int = defaultdict(int, **kwargs)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})
Bagaimana cara kerjanya
Seperti kamus anak standar, kamus ini dapat melakukan semua fungsi yang sama.
Tetapi jika melewati kunci yang tidak dikenal itu mengembalikan nilai default bukannya kesalahan. Misalnya:
>>> d_int['a']
10
>>> d_int['d']
0
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12, 'd': 0})
Jika Anda ingin mengubah nilai default, timpa default_factory:
>>> d_int.default_factory = lambda: 1
>>> d_int['e']
1
>>> d_int
defaultdict(<function <lambda> at 0x7f34a0a91578>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0})
atau
>>> def foo():
... return 2
>>> d_int.default_factory = foo
>>> d_int['f']
2
>>> d_int
defaultdict(<function foo at 0x7f34a0a0a140>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0, 'f': 2})
Contoh dalam Pertanyaan
Contoh 1
Karena int telah diteruskan sebagai default_factory, kunci apa pun yang tidak dikenal akan mengembalikan 0 secara default.
Sekarang ketika string dilewatkan dalam loop, itu akan meningkatkan jumlah huruf-huruf itu di d.
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> d.default_factory
<type 'int'>
>>> for k in s:
... d[k] += 1
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
>>> d
defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})
Contoh 2
Karena daftar telah diteruskan sebagai default_factory, kunci apa pun yang tidak dikenal (tidak ada) akan mengembalikan [] (mis. Daftar) secara default.
Sekarang karena daftar tuple dilewatkan dalam loop, itu akan menambahkan nilai dalam d [warna]
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> d.default_factory
<type 'list'>
>>> for k, v in s:
... d[k].append(v)
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> d
defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})
default_factory = None
setelah Anda selesai mengisi defaultdict tersebut. Lihat pertanyaan ini .