Suponha escreveu um livro e tem dois
índices: um, com os capítulos e as páginas de início e de fim do capítulo. Outro, o índice remissivo, com as palavras e as páginas onde ocorrem. Pretendemos estabelecer uma nova
associação em que as palavras têm associadas os capítulos onde aparecem. Vejamos como podemos resolver esta questão. Comecemos por pensar na organização dos índices: como dicionários.
1.
indice
=
{
'c1'
:[
1
,
34
],
'c2'
: [
35
,
42
],
'c3'
:[
43
,
52
],
'c4'
:[
53
,
60
]}
2.
remissivo
=
{‘p1
':[2,54],'
p2
':[36,37,50],'
p3':[
40
]}
Agora a solução. Sabemos que queremos passar das palavras aos capítulos. Então uma ideia simples é a de percorrer os dicionários das palavras e, por cada palavra e por cada página em que ocorre, procurar qual o capítulo.
01.
def
cap_pal(indice, remissivo):
02.
03.
sol
=
dict()
04.
05.
for
palavra, pgs
in
remissivo.items():
06.
07.
08.
09.
return
sol
Tornemos este esboço mais concreto.
01.
def
cap_pal(indice, remissivo):
02.
sol
=
dict()
03.
04.
for
palavra, pgs
in
remissivo.items():
05.
06.
cap
=
[]
07.
for
pagina
in
pgs:
08.
c
=
capitulo(indice,pagina)
09.
if
c
not
in
cap:
10.
cap.append(c)
11.
sol[palavra]
=
cap
12.
return
sol
Esta solução tem o cuidado de
não acrescentar mais do que uma vez o capítulo, ou seja, se a palavra ocorrer mais do que uma vez no capítulo tal só é indicado uma vez. Mas falta-nos escrever o código que determina em que capítulo está uma dada página.
1.
def
capitulo(dicio,pg):
2.
for
ch, val
in
dicio.items():
3.
if
val[
0
] <
=
pg <
=
val[
1
]:
4.
return
ch
5.
6.
return
None
Percorremos o dicionário extraindo as páginas de início e de fim para cada capítulo e tentamos saber em que intervalo está a nossa página, para definir o capítulo.
E pronto. Podemos passar ao exercício seguinte…
Sem comentários:
Enviar um comentário