Ne cifrázzuk, lássunk rögtön egy példát (a kimenet áttördelve):
>>> lst1= ['Rúben', 'Simeon', 'Lévi', 'Júda', 'Izsakhár', 'Zebulon']
>>> lst2= ['József', 'Benjámin']
>>> lst3= ['Dán', 'Nafthali']
>>> lst4= ['Gád', 'Áser']
>>> d_l= {'Lea': lst1, 'Rákhel': lst2, 'Bilha': lst3, 'Zilpa': lst4}
>>> d_l
{'Bilha': ['Dán', 'Nafthali'],
'Rákhel': ['József', 'Benjámin'],
'Zilpa': ['Gád', 'Áser'],
'Lea': ['Rúben', 'Simeon', 'Lévi', 'Júda', 'Izsakhár', 'Zebulon']}
A későbbiekben szükségünk lesz arra, hogy adott kulcshoz tartozó új elemet illesszünk be. Ilyenkor meg kell különböztetnünk azt az esetet, amikor a kulcs már szerepel a szótárban (és így a hozzá tartozó listához kell új elemet adnunk), illetve amikor a kulcs még nem szerepel a szótárban (és így új kulcs-érték párt kell beszúrnunk):
>>> if 'Lea' in d_l:
... d_l['Lea']+= ['Dína']
... else:
... d_l['Lea'] = ['Dína']
...
>>> d_l
{'Bilha': ['Dán', 'Nafthali'],
'Rákhel': ['József', 'Benjámin'],
'Zilpa': ['Gád', 'Áser'],
'Lea': ['Rúben', 'Simeon', 'Lévi', 'Júda', 'Izsakhár', 'Zebulon', 'Dína']}
A fenti szótár 'Lea' indexű eleme értelemszerűen egy lista, melynek 0 indexű eleme egy string:
>>> d_l['Lea'] ['Rúben', 'Simeon', 'Lévi', 'Júda', 'Izsakhár', 'Zebulon'] >>> d_l['Lea'][0] 'Rúben'
A legutóbb megkezdett, SMS szavak című feladatban egy szöveges állományt is létre kell hoznunk (inf_e_20070516_m_04).
Korábban említettük már, hogy az olvasásra megnyitott állományokat is illenék lezárni, állományok írása esetén pedig ez elemi fontosságú. A python nyelv with szerkezete azonban mindkettőről gondoskodik: következzék erre az első példa.
A jól ismert módon végigolvassuk az állomány sorait, s listát építünk az azokban található szavakból. Ezzel párhuzamosan azonban egy másik, a későbbi egységek megoldását előkészítő lépést is elvégzünk: minden szóhoz meghatározzuk a neki megfelelő számsorozatot, s felépítünk egy szótárat, melynek ezek a kódok lesznek a kulcsai, az értékek pedig az egyes kulcsokhoz tartozó (egy vagy többelemű) listák, azaz azok a szavak, melyekhez az adott számsorozat a kód.
_(3)
print('Beolvassuk a szavak.txt állományt…')
l_wds= []
dl_cw= {}
with open('inf_e_20070516_m_04_szavak.txt') as file:
for word in file:
word= word.strip()
l_wds+= [word]
code= f_wc(word)
if not code in dl_cw:
dl_cw[code] = [word]
else:
dl_cw[code]+= [word]
Talán könnyebb lesz a fentiek megértése, ha megnézzük, hogy alakul a dl_cw változó értéke az egyes sorok (tehát az egyes szavak) beolvasása után (a kimenet többszörösen megkurtítva):
{'22525': ['ablak']}
{'22525': ['ablak'], '2276627': ['abroncs']}
{'22525': ['ablak'], '2276627': ['abroncs'], '23': ['ad']}
{'22525': ['ablak'], '2276627': ['abroncs'], '244': ['agg'], '23': ['ad']}
…
{'2692': ['anya'], …, '27269': ['arany'], …, '2726967': ['aranyos'], …, '272': ['apa'], …}
{'2692': ['anya'], …, '27269': ['arany'], …, '2726967': ['aranyos'], …, '272': ['apa', 'arc'], …}
…