namedtuple dan OrderedDict
Koleksi berguna yang lain
namedtuple dan OrderedDict ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Dua koleksi tambahan yang berguna
Modul collections menyertakan namedtuple untuk tupel seperti rekod yang mudah dibaca dan OrderedDict untuk kamus dengan kaedah susunan tambahan.
Import kedua-duanya dengan from collections import namedtuple, OrderedDict.
from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)Mentakrifkan tupel bernama
namedtuple(name, fields) mencipta subkelas tupel baharu. Anda memberikan nama jenis dan senarai nama medan. Hasilnya ialah kelas yang boleh anda wujudkan.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)Akses mengikut nama
Manfaat utamanya: baca medan mengikut nama dan bukannya nombor indeks yang mengelirukan, supaya kod menjadi jauh lebih mudah dibaca.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)Masih merupakan tupel
Tupel bernama ialah tupel sebenar, jadi pengindeksan, nyahbungkus dan lelaran masih boleh digunakan.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)Tidak boleh diubah tetapi boleh diganti
Seperti semua tupel, tupel bernama tidak boleh diubah. Untuk mendapatkan salinan yang diubah suai, gunakan ._replace(), yang mengembalikan tika baharu.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)Menukar kepada kamus
._asdict() menukar tupel bernama kepada kamus biasa yang memetakan nama medan kepada nilai.
from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())Nilai lalai
Berikan defaults semasa mentakrifkan tupel bernama. Nilai lalai digunakan pada medan paling kanan, jadi anda boleh mengabaikannya semasa mencipta tika.
from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))Memeriksa medan
Atribut ._fields menyenaraikan nama medan, yang berguna untuk pemeriksaan kendiri atau membina kod umum.
from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)Asas OrderedDict
OrderedDict mengingati susunan penyisipan. Sejak Python 3.7, kamus biasa juga mengekalkan susunan, tetapi OrderedDict menambah kaedah susunan yang tidak tersedia dengan cara lain.
from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)move_to_end
.move_to_end(key) mengalihkan kunci ke hujung (atau ke permulaan dengan last=False). Ciri ini unik kepada OrderedDict dan berguna untuk logik gaya LRU.
from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))Kesamaan yang peka terhadap susunan
Dua objek OrderedDict adalah sama hanya jika elemennya berada dalam susunan yang sama. Kamus biasa mengabaikan susunan semasa perbandingan.
from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))Semakan pantas
Bagaimanakah anda mencipta salinan tupel bernama yang diubah suai, sedangkan tupel itu tidak boleh diubah?
Imbas kembali: tupel bernama dan OrderedDict
Ringkasan:
namedtuple(name, fields)menghasilkan rekod yang mudah dibaca dan tidak boleh diubah, dengan akses mengikut nama.- Gunakan
._replace()untuk salinan yang diubah suai dan._asdict()untuk menukarnya kepada kamus. OrderedDictmengekalkan susunan penyisipan dan menambah.move_to_end().- Kesamaan OrderedDict peka terhadap susunan, tidak seperti kamus biasa.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 76
- Pelajaran
- 320
Soalan Lazim
Adakah pelajaran “namedtuple dan OrderedDict” percuma?
Ya — teks penuh “namedtuple dan OrderedDict” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “namedtuple dan OrderedDict”?
Koleksi berguna yang lain Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Python Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “namedtuple dan OrderedDict” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Counter
- defaultdict
- deque
- namedtuple dan OrderedDict