Python Academy · Pelajaran

defaultdict

Mulakan nilai kamus secara automatik

Pelajaran 2 daripada 413 langkah

defaultdict ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 2 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.

Masalah kunci yang tiada

Dengan dict biasa, mengakses kunci yang tidak wujud menimbulkan KeyError. Ini menyusahkan apabila Anda mahu membina nilai secara berperingkat.

d = {}
try:
    d['x'].append(1)
except KeyError as e:
    print('KeyError:', e)

Memperkenalkan kamus lalai

defaultdict daripada collections menerima fungsi kilang yang menghasilkan nilai lalai untuk setiap kunci yang tiada. Importnya dengan from collections import defaultdict.

from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))

Mengira dengan integer

Dengan defaultdict(int), kunci yang tiada secara lalai bernilai 0, jadi Anda boleh menambah nilainya tanpa menyemaknya terlebih dahulu.

from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
    counts[ch] += 1
print(dict(counts))

Mengumpulkan dengan senarai

defaultdict(list) mencipta senarai kosong untuk kunci baharu, sesuai untuk mengumpulkan item ke dalam kumpulan.

from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
    groups[w[0]].append(w)
print(dict(groups))

Mengumpulkan dengan himpunan

Gunakan defaultdict(set) apabila Anda mahu nilai unik bagi setiap kunci. Pendua digugurkan secara automatik.

from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
    seen[k].add(v)
print(dict(seen))

Fungsi kilang mestilah boleh dipanggil

Argumen itu ialah sesuatu yang boleh dipanggil, tidak menerima sebarang argumen dan mengembalikan nilai lalai. int, list, set dan dict semuanya berfungsi kerana panggilan terhadapnya mengembalikan nilai kosong.

from collections import defaultdict
print(int())
print(list())
print(set())

Nilai lalai tersuai dengan lambda

Anda boleh memberikan sesuatu yang boleh dipanggil tanpa argumen, seperti lambda, untuk mengembalikan nilai lalai tersuai.

from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))

Kamus lalai bersarang

Fungsi kilang itu sendiri boleh mencipta defaultdict, membolehkan Anda membina struktur bersarang tanpa persediaan manual.

from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])

Capaian mencipta kunci

Beri perhatian: sekadar membaca kunci yang tiada akan memasukkannya dengan nilai lalai. Selepas diakses, kunci itu wujud dalam kamus.

from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))

Menyemak tanpa memasukkan

Untuk menyemak kunci tanpa menciptanya, gunakan kaedah .get() atau operator in, yang tidak pernah mencetuskan fungsi kilang.

from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))

Menukar semula kepada kamus

Balut defaultdict dalam dict() apabila Anda mahukan kamus biasa, contohnya sebelum mengembalikannya daripada fungsi atau mencetaknya dengan kemas.

from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)

Semakan Pantas

Apakah yang diwakili oleh argumen yang diberikan kepada kamus lalai?

Rumusan: Kamus lalai

Perkara penting:

  • defaultdict(factory) mencipta nilai secara automatik untuk kunci yang tiada.
  • int memberikan 0 (pengiraan), list memberikan [] (pengumpulan), dan set memberikan himpunan kosong (pengumpulan unik).
  • Fungsi kilang boleh berupa apa-apa yang boleh dipanggil tanpa argumen, termasuk lambda.
  • Membaca kunci yang tiada akan memasukkannya; gunakan .get() atau in untuk menyemaknya dengan selamat.
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
    g[w[0]].append(w)
print(dict(g))
Percuma untuk bermula

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 “defaultdict” percuma?

Ya — teks penuh “defaultdict” 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 “defaultdict”?

Mulakan nilai kamus secara automatik 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 2 daripada 4.

Berapa lamakah pelajaran “defaultdict” 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

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple dan OrderedDict
← Kembali ke Python Academy