defaultdict
Initialiser ordbokverdier automatisk
defaultdict er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Problemet med manglende nøkler
Med en vanlig dict utløses KeyError når du forsøker å hente en nøkkel som ikke finnes. Dette er upraktisk når du vil bygge opp verdier trinnvis.
d = {}
try:
d['x'].append(1)
except KeyError as e:
print('KeyError:', e)Her kommer defaultdict
defaultdict fra collections tar en fabrikkfunksjon som produserer en standardverdi for alle manglende nøkler. Importer den med from collections import defaultdict.
from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))Telle med int
Med defaultdict(int) blir manglende nøkler automatisk satt til 0, slik at du kan øke verdien uten å kontrollere først.
from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
counts[ch] += 1
print(dict(counts))Gruppere med list
defaultdict(list) oppretter en tom liste for nye nøkler, noe som passer perfekt for å gruppere elementer i bøtter.
from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
groups[w[0]].append(w)
print(dict(groups))Samle med set
Bruk defaultdict(set) når du vil ha unike verdier per nøkkel. Duplikater fjernes automatisk.
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))Fabrikken må kunne kalles
Argumentet er en kallbar verdi som ikke tar argumenter, og som returnerer standardverdien. int, list, set og dict fungerer alle fordi et kall på dem returnerer en tom verdi.
from collections import defaultdict
print(int())
print(list())
print(set())Egendefinert standardverdi med lambda
Du kan angi en hvilken som helst kallbar verdi uten argumenter, for eksempel en lambda, for å returnere en egendefinert standardverdi.
from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))Nestede defaultdict-objekter
En fabrikk kan selv opprette en defaultdict, slik at du kan bygge nestede strukturer uten manuell klargjøring.
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'])Tilgang oppretter nøkkelen
Vær oppmerksom på at det å bare lese en manglende nøkkel setter den inn med standardverdien. Etter oppslaget finnes nøkkelen i ordboken.
from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))Kontrollere uten å sette inn
Bruk metoden .get() eller operatoren in for å kontrollere en nøkkel uten å opprette den. De utløser aldri fabrikken.
from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))Konvertere tilbake til dict
Pakk en defaultdict inn i dict() når du ønsker en vanlig ordbok, for eksempel før du returnerer den fra en funksjon eller skriver den ut på en ryddig måte.
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)Hurtigsjekk
Hva representerer argumentet som sendes til defaultdict?
Oppsummering: defaultdict
Dette er hovedpunktene:
defaultdict(factory)oppretter automatisk verdier for manglende nøkler.intgir 0 (opptelling),listgir [] (gruppering), ogsetgir et tomt sett (unik gruppering).- Fabrikken kan være en hvilken som helst kallbar verdi uten argumenter, inkludert en
lambda. - Lesing av en manglende nøkkel setter den inn. Bruk
.get()ellerinfor å undersøke den uten å opprette den.
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
g[w[0]].append(w)
print(dict(g))Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «defaultdict» gratis?
Ja – hele teksten i «defaultdict» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «defaultdict»?
Initialiser ordbokverdier automatisk Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «defaultdict»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Counter
- defaultdict
- deque
- namedtuple og OrderedDict