Rumah > pembangunan bahagian belakang > Tutorial Python > Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

WBOY
Lepaskan: 2023-04-12 09:04:10
ke hadapan
1397 orang telah melayarinya

Kata Pengantar

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.

OrderedDict

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]):
Salin selepas log masuk

atau

from collections import OrderedDict
ordDict = OrderedDict([items]):
Salin selepas log masuk

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.

1) popitem(last=True):

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).

2) move_to_end(key, last=True):

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:

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

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:

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

Hasil berjalan adalah seperti berikut:

删除前的OrderedDict:
x X
y Y
z Z
插入后的OrderedDict:
y Y
z Z
x X
Salin selepas log masuk

UserDict

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])
Salin selepas log masuk
Salin selepas log masuk

atau

import collections
userDict = collections.UserDict([initialdata])
Salin selepas log masuk
Salin selepas log masuk

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:

1) data

Kamus sebenar yang digunakan untuk menyimpan kandungan kelas UserDict. Contohnya adalah seperti berikut:

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

Output adalah seperti berikut:

{'name': 'Kevin Cui', 'age': 24}
Salin selepas log masuk

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:

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

Output yang sedang dijalankan adalah seperti berikut:

{'x': 10, 'y': 20}
Salin selepas log masuk

Sudah tentu, anda juga boleh melaksanakan lain yang berkaitan penyesuaian sendiri.

DefaultDict

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, /[,…])
Salin selepas log masuk

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:

1) __missing__(key):

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.

2)default_factory

DefaultDict对象支持default_factory实例变量。该属性由__missing__()方法使用。如果存在,则从构造函数的第一个参数开始初始化;如果不存在,则初始化为None。

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

运行程序输出结果为:

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

Salin selepas log masuk

在上述代码中,我们使用列表类型作为default_factory,更易于将包含键值序列对的列表组成字典。当第一次遇到每个键时,它还不在映射中,因此使用default_factory函数自动创建一个条目,该函数返回一个空列表。然后list.append()操作将值连接到新列表。当再次遇到键时,查找正常进行(返回该键的列表),然后list.append()操作将另一个值添加到列表中。这种技术比使用dict.setdefault()的等效技术要简单得多。

我们再看一个示例:

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

输出结果如下:

[('a', 2), ('c', 1), ('g', 2), ('h', 1), ('i', 1), ('j', 1), ('n', 2)]
Salin selepas log masuk

在上面代码中,我们将default_factory设置为int。这使得defaultdict用于计数(就像其他语言中的bag或multiset)。

当第一次遇到某个字母时,它就在映射中是不存在的,因此default_factory函数调用int()来提供一个默认的0计数。然后递增操作为每个字母建立计数。

提示:这里传递的int()函数默认返回的是整数0。若想返回任意值,可以自定义个一个基于lambda的常量函数。示例代码如下:

Pengaturcaraan Python: Penjelasan terperinci tentang kamus terbina dalam (dikt) subkelas dan aplikasi (semua di satu tempat)

一言以蔽之:使用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!

Label berkaitan:
sumber:51cto.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan