Artikel ini terutamanya memperkenalkan senario aplikasi dan contoh penggunaan beberapa subkelas sambungan terbina dalam kelas kamus (dikt) dalam modul koleksi Python Ia juga digabungkan dengan kod supaya anda boleh menguasai ini dengan "cara ringkas dan pantas" Subkelas yang berkaitan secara langsung dengan dict - OrderedDict, defaultdict, userDict.
Kamus yang dipesan (OrderedDict) dalam modul koleksi Python adalah seperti kamus biasa, tetapi mempunyai beberapa ciri tambahan yang berkaitan dengan operasi pengisihan. OrderedDict mengingati susunan kekunci dimasukkan. Mereka menjadi kurang penting sekarang kerana kelas dict terbina dalam memperoleh keupayaan untuk mengingati susunan sisipan (tingkah laku baharu ini dijamin dalam Python 3.7, jadi OrderedDict nampaknya kurang penting sekarang). Format umum untuk mencipta kamus tersusun:
import collections ordDict = collections.OrderedDict([items]):
atau
from collections import OrderedDict ordDict = OrderedDict([items]):
Ini mencipta dan mengembalikan contoh objek subkelas dict OrderedDict yang mempunyai ciri khusus untuk menyusun semula kamus Kaedah Sequential. Artikel ini memperkenalkan kaedah ini secara ringkas.
Kaedah popitem() kamus yang dipesan mengembalikan dan memadamkan pasangan (kunci, nilai). Jika terakhir adalah Benar, pasangan nilai kunci yang sepadan dikembalikan dalam mod LIFO (masuk terakhir, keluar dahulu) jika tidak, ia dikembalikan dalam susunan FIFO (masuk dahulu, keluar dahulu).
Alihkan kekunci sedia ada ke kedua-dua hujung kamus yang dipesan. Jika yang terakhir ialah Benar (lalai), item itu dialihkan ke kanan; jika yang terakhir ialah Salah, ia dialihkan ke permulaan. KeyError akan dinaikkan jika kunci tidak wujud.
Sila lihat kod:
Andaikan kami memadam dan memasukkan semula kunci yang sama ke dalam OrderedDict. Ia akan meletakkan kunci ini pada penghujung untuk mengekalkan susunan sisipan kunci. Contohnya adalah seperti berikut:
Hasil berjalan adalah seperti berikut:
删除前的OrderedDict: x X y Y z Z 插入后的OrderedDict: y Y z Z x X
Kelas UserDict digunakan sebagai objek kamus terbina dalam Python (dikt). Keperluan untuk kelas ini telah digantikan sebahagiannya dengan keupayaan untuk mensubkelas secara langsung daripada dict namun, kelas ini lebih mudah digunakan kerana kamus asas boleh diakses sebagai atribut. Gunakan UserDict apabila anda ingin mencipta kamus anda sendiri dengan beberapa ciri yang diubah suai atau baharu. Format penggunaannya adalah seperti berikut:
import collections userDict = collections.UserDict([initialdata])
atau
import collections userDict = collections.UserDict([initialdata])
Jenis kamus simulasi ini, kandungan contohnya disimpan dalam kamus biasa, yang boleh diakses melalui atribut data bagi contoh UserDict . Jika data permulaan disediakan, kandungan data dimulakan dengan ini; ambil perhatian bahawa kejadian itu sendiri tidak mengekalkan rujukan berasingan (bukan eksklusif) kepada data awal, membenarkan ia digunakan untuk tujuan lain.
Selain menyokong kaedah dan operasi yang dipetakan, kejadian UserDict menyediakan atribut berikut:
Kamus sebenar yang digunakan untuk menyimpan kandungan kelas UserDict. Contohnya adalah seperti berikut:
Output adalah seperti berikut:
{'name': 'Kevin Cui', 'age': 24}
Andaikan kita ingin mentakrifkan objek kamus tersuai yang menyokong operasi penambahan ( menggabungkan dua kamus) . Apabila kami menambah dua contoh kamus tersuai, kami mengharapkan untuk mendapatkan kamus baharu yang mengandungi semua elemen dalam kedua-dua kamus. Perlu diingat bahawa jika anda cuba menambah kamus biasa dalam Python, anda akan mendapat TypeError. Marilah kita melaksanakannya dengan bantuan UserDict:
Output yang sedang dijalankan adalah seperti berikut:
{'x': 10, 'y': 20}
Sudah tentu, anda juga boleh melaksanakan lain yang berkaitan penyesuaian sendiri.
Masalah biasa dengan kelas Kamus dalam Python ialah kehilangan kunci. Apabila cuba mengakses kunci yang tidak wujud dalam kamus, anda akan mendapat pengecualian KeyError. Jadi apabila anda perlu mengakses elemen dalam kamus, anda perlu mengendalikan situasi ini. Nasib baik, Python menyediakan kelas DefaultDict. Ia digunakan untuk menyediakan beberapa nilai lalai untuk kunci yang tidak wujud tanpa menaikkan KeyError.
DefaultDict ialah subkelas kelas dict terbina dalam. Ia mengatasi kaedah dan menambah pembolehubah contoh boleh ditulis. Selebihnya fungsi adalah sama seperti dict. Format penggunaan adalah seperti berikut:
import colloections defaultDict = collections.defaultdict(default_factory=None, /[,…])
Kod di atas mengembalikan objek seperti kamus DefaultDict baharu, iaitu subkelas kelas dict terbina dalam.
Parameter pertama menyediakan nilai awal untuk atribut default_factory, yang lalai kepada Tiada. Semua argumen yang tinggal dianggap seolah-olah diserahkan kepada pembina dict, termasuk argumen kata kunci. Apa yang perlu difahami ialah jika parameter ini disediakan, ia mesti boleh dipanggil.
Selain menyokong operasi dict standard, objek DefaultDict juga menyokong atribut kaedah berikut:
Jika atribut default_factory ialah Tiada, gunakan kekunci sebagai Parameter akan menimbulkan pengecualian KeyError.
Jika default_factory bukan Tiada, memanggilnya tanpa argumen memberikan nilai lalai untuk kunci yang diberikan, yang dimasukkan ke dalam kamus kunci dan dikembalikan.
DefaultDict对象支持default_factory实例变量。该属性由__missing__()方法使用。如果存在,则从构造函数的第一个参数开始初始化;如果不存在,则初始化为None。
运行程序输出结果为:
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
在上述代码中,我们使用列表类型作为default_factory,更易于将包含键值序列对的列表组成字典。当第一次遇到每个键时,它还不在映射中,因此使用default_factory函数自动创建一个条目,该函数返回一个空列表。然后list.append()操作将值连接到新列表。当再次遇到键时,查找正常进行(返回该键的列表),然后list.append()操作将另一个值添加到列表中。这种技术比使用dict.setdefault()的等效技术要简单得多。
我们再看一个示例:
输出结果如下:
[('a', 2), ('c', 1), ('g', 2), ('h', 1), ('i', 1), ('j', 1), ('n', 2)]
在上面代码中,我们将default_factory设置为int。这使得defaultdict用于计数(就像其他语言中的bag或multiset)。
当第一次遇到某个字母时,它就在映射中是不存在的,因此default_factory函数调用int()来提供一个默认的0计数。然后递增操作为每个字母建立计数。
提示:这里传递的int()函数默认返回的是整数0。若想返回任意值,可以自定义个一个基于lambda的常量函数。示例代码如下:
一言以蔽之:使用DefaultDict的好处就是可以避免KeyError异常,并进行一些可能的特定处理。
本文主要介绍了Python字典(dict)类相关的几个内置子类的应用。这些直接相关的子类分别是OrderedDict、defaultdict、userDict等内置子类。通过示例代码和关联描述,让你更轻松掌握它们的应用和基本规则。
Atas ialah kandungan terperinci Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!