Bagaimanakah anda melaksanakan perintah lalai dalam Python untuk mengekalkan susunan utama dan menetapkan nilai lalai?

Mary-Kate Olsen
Lepaskan: 2024-10-28 09:33:02
asal
521 orang telah melayarinya

How do you implement an ordered defaultdict in Python to maintain key order and assign default values?

Melaksanakan Dict Lalai Tertib

Seseorang mungkin mahu menggabungkan fungsi OrderedDict() dan defaultdict() daripada modul Koleksi Python ke buat dict lalai tertib. Gabungan ini akan membolehkan untuk mengekalkan kamus di mana kunci dipesan dan nilai lalai diberikan apabila mengakses kekunci yang tidak wujud.

Untuk mencapai ini, kami boleh menggunakan versi diubah suai resipi yang disediakan dalam komuniti Stack Overflow. Berikut ialah kodnya:

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

class DefaultOrderedDict(OrderedDict):
    # Source: http://stackoverflow.com/a/6190500/562769
    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

    # Override necessary methods for pickling
    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>
Salin selepas log masuk

Coretan kod ini menggabungkan kaedah __init__, membolehkan anda menentukan fungsi kilang lalai. Kaedah __missing__ mengendalikan akses kunci dan memberikan nilai lalai menggunakan fungsi kilang. Selain itu, pelbagai kaedah seperti __reduce__, copy(), __copy__(), __deepcopy__(), dan __repr__() ditakrifkan untuk penjerukan dan perwakilan yang betul bagi kamus tersuai ini.

Dengan menggunakan kelas DefaultOrderedDict ini, anda boleh bina kamus tersusun yang menyediakan nilai lalai untuk kunci yang hilang. Pendekatan ini menggabungkan faedah pengurusan kunci tersusun dan penetapan nilai dinamik.

Atas ialah kandungan terperinci Bagaimanakah anda melaksanakan perintah lalai dalam Python untuk mengekalkan susunan utama dan menetapkan nilai lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!