Melaksanakan subkelas dict dan mengatasi kaedah __missing__ ialah pendekatan kreatif untuk mencipta kamus bersarang. Kaedah ini menyediakan cara untuk memintas dan mengendalikan kunci yang hilang dengan anggun. Begini caranya:
Berikut ialah contoh pelaksanaan Vividict:
class Vividict(dict): def __missing__(self, key): value = self[key] = type(self)() return value
Menggunakan subkelas ini, anda boleh mencipta kamus bersarang dengan cepat:
d = Vividict() d['foo']['bar'] = 1 d['foo']['baz'] = 2 print(d) # {'foo': {'bar': 1, 'baz': 2}}
Pendekatan ini menawarkan sintaks yang bersih untuk mengisi kamus bersarang dan memudahkan proses mencipta struktur hierarki yang kompleks.
Selain menggunakan subkelas tersuai dengan __missing__, berikut ialah beberapa alternatif lain untuk bersarang kamus:
1. dict.setdefault:
Menggunakan dict.setdefault menyediakan cara ringkas untuk mencipta kamus bersarang, tetapi sintaksnya boleh digunakan untuk struktur kompleks.
d = {} d.setdefault('foo', {}).setdefault('bar', []).append(1) d.setdefault('foo', {}).setdefault('baz', []).append(2) print(d) # {'foo': {'bar': [1], 'baz': [2]}}
2. Auto-vivified defaultdict:
defaultdict daripada modul koleksi boleh digunakan untuk mencipta kamus auto-vivified yang mencipta kamus bersarang secara automatik mengikut keperluan. Walau bagaimanapun, pendekatan ini boleh membawa kepada keluaran yang bersepah apabila menyahpepijat atau memeriksa data.
from collections import defaultdict def vivdict(): return defaultdict(vivdict) d = vivdict() d['foo']['bar'] = 1 d['foo']['baz'] = 2 print(d) # defaultdict(...defaultdict(...defaultdict(...))), etc.
3. Kunci Tuple:
Daripada menggunakan kamus bersarang, pertimbangkan untuk menggunakan tupel sebagai kunci. Pendekatan ini memudahkan lelaran dan pengagregatan tetapi boleh membawa kepada kod yang lebih kompleks dari segi sintaksis untuk mengurus subset kamus.
d = {('foo', 'bar'): 1, ('foo', 'baz'): 2}
Mengenai prestasi, dict .setdefault secara amnya adalah yang paling cekap untuk kod pengeluaran. Walau bagaimanapun, untuk kegunaan interaktif di mana kelajuan pelaksanaan kurang kritikal, Vividict boleh menyediakan penyelesaian yang lebih mudah dan boleh dibaca.
Melaksanakan kamus bersarang dengan subkelas dan __missing__ menawarkan pendekatan yang berkuasa dan fleksibel yang boleh disesuaikan dengan kes penggunaan tertentu. Walaupun ia mungkin memperkenalkan beberapa kemungkinan perangkap, ia juga memberikan kelebihan dari segi kebolehbacaan kod dan manipulasi data. Kaedah alternatif, seperti dict.setdefault dan auto-vivified defaultdict, berfungsi untuk tujuan mereka sendiri dengan pelbagai tahap prestasi dan kebolehbacaan output.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Kamus Bersarang dalam Python dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!