1.
def
add_palavra_triv(indice,palavra,pagina):
2.
if
palavra
in
indice:
3.
indice[palavra].append(pagina)
4.
else
:
5.
indice[palavra]
=
[pagina]
Note-se que não é preciso fazer if palavra in indice.keys(). Atente-se ainda no modo distinto como temos que tratar o caso de a palavra estar, ou não, no dicionário. O leitor mais conhecedor de Python pode saber que é possível fazer tudo sem precisar do teste, e achar que usar o setdefault ou o get é o mesmo. Propõe por isso duas soluções alternativas:
1.
def
add_palavra_get(indice,palavra, pagina):
2.
indice.get(palavra,[]).append(pagina)
3.
4.
def
add_palavra_set(indice,palavra, pagina):
5.
indice.setdefault(palavra,[]).append(pagina)
Mas, para sua surpresa, se executar o código seguinte o resultado não é bem o que estava à espera.
01.
>>> dic
=
{
'eu'
:[
1
,
5
,
7
],
'tu'
: [
2
,
4
,
7
]}
02.
>>> add_palavra_get(dic,
'eu'
,
10
)
03.
>>> add_palavra_get(dic,
'ele'
,
20
)
04.
>>>
print
dic
05.
{
'eu'
: [
1
,
5
,
7
,
10
],
'tu'
: [
2
,
4
,
7
]}
06.
>>> add_palavra_set(dic,
'tu'
,
8
)
07.
>>> add_palavra_set(dic,
'ele'
,
33
)
08.
>>>
print
dic
09.
{
'eu'
: [
1
,
5
,
7
,
10
],
'tu'
: [
2
,
4
,
7
,
8
],
'ele'
: [
33
]}
Fica claro que no caso em que a chave não está no dicionário os dois métodos são diferentes: enquanto setdefault acrescenta o novo par, o mesmo não acontece com o método get.
Podemos definir como regra que sempre que os valores forem objectos mutáveis deve preferir setdefault. Caso se tratem de objectos imutáveis deve optar por get. Por exemplo, se o que pretende é apenas contar quantas vezes uma palavra ocorre num texto, deve usar:
1.
indice[palavra]
=
indice.get(palavra,
0
)
+
1
Sem comentários:
Enviar um comentário