Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh menggabungkan ciri OrderedDict dan defaultdict dalam Python untuk mencipta dict lalai yang dipesan?

Bagaimanakah anda boleh menggabungkan ciri OrderedDict dan defaultdict dalam Python untuk mencipta dict lalai yang dipesan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 19:02:02667semak imbas

How can you combine the features of OrderedDict and defaultdict in Python to create an ordered default dict?

Melaksanakan Dict Lalai Tertib

OrderedDict dan defaultdict ialah dua struktur data berguna daripada modul koleksi Python. OrderedDict mengekalkan susunan sisipan elemennya, manakala defaultdict menyediakan nilai lalai untuk kunci yang hilang. Menggabungkan fungsi ini menghasilkan dict lalai tersusun.

Untuk mencapai ini, kita boleh menggunakan versi resipi yang diubah suai daripada Stack Overflow:

<code class="python">from collections import OrderedDict, Callable

class DefaultOrderedDict(OrderedDict):
    def __init__(self, default_factory=None, *a, **kw):
        if (default_factory is not None and
           not isinstance(default_factory, Callable)):
            raise TypeError('first argument must be callable')
        OrderedDict.__init__(self, *a, **kw)
        self.default_factory = default_factory

    def __getitem__(self, key):
        try:
            return OrderedDict.__getitem__(self, key)
        except KeyError:
            return self.__missing__(key)

    def __missing__(self, key):
        if self.default_factory is None:
            raise KeyError(key)
        self[key] = value = self.default_factory()
        return value

    def __reduce__(self):
        if self.default_factory is None:
            args = tuple()
        else:
            args = self.default_factory,
        return type(self), args, None, None, self.items()

    def copy(self):
        return self.__copy__()

    def __copy__(self):
        return type(self)(self.default_factory, self)

    def __deepcopy__(self, memo):
        import copy
        return type(self)(self.default_factory,
                          copy.deepcopy(self.items()))

    def __repr__(self):
        return 'OrderedDefaultDict(%s, %s)' % (self.default_factory,
                                               OrderedDict.__repr__(self))</code>

Pelaksanaan ini menyokong semua ciri OrderedDict dan defaultdict, membolehkan anda membuat kamus tersusun dengan nilai lalai untuk kunci yang hilang.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menggabungkan ciri OrderedDict dan defaultdict dalam Python untuk mencipta dict lalai yang dipesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn