First let’s modify your example a little to better understand what happens:
dicionario = {
"uva":"R$ 5,00"
}
for key, value in dicionario.items():
print('substituindo', value)
if 'R$ ' in value or '%' in value or 'N/A' in value:
print('antes da primeira substituição: ', value)
dicionario[key] = value.replace('R$ ', 'reais ')
print('depois da primeira substituição: ', dicionario[key])
print('antes da segunda substituição: ', value)
dicionario[key] = value.replace('%', 'porcento')
print('depois da segunda substituição: ', dicionario[key])
print('antes da terceira substituição: ', value)
dicionario[key] = value.replace('N/A', 'Nada')
print('depois da terceira substituição: ', dicionario[key])
I left the dictionary with only one entry, to simplify. Then, I print the value
before each call from replace
and the value of dicionario[key]
right after. The result is:
substituindo R$ 5,00
antes da primeira substituição: R$ 5,00
depois da primeira substituição: reais 5,00
antes da segunda substituição: R$ 5,00
depois da segunda substituição: R$ 5,00
antes da terceira substituição: R$ 5,00
depois da terceira substituição: R$ 5,00
Note that the value
never changes, because the call of replace
does not modify the string: what it does is return another modified string.
Then you first exchange the "R$" for "real", and modify the value of the dictionary (dicionario[key]
receives the value of the modified string, but value
continues to have the "R$").
Then you try to trade the "%" for "percent," but how value
no "%", it is not modified. And this unmodified value (still with "R$") is placed in dicionario[key]
- that is, the previous value ("real 5.00") was superscripted, and dicionario[key]
became "R$ 5,00".
If the idea is to make all replacements, the calls from replace
should be chained. Something like that:
dicionario = {
"uva":"R$ 5,00",
"abacaxi": "15%",
"abacate": "preço: N/A"
}
for key, value in dicionario.items():
if 'R$ ' in value or '%' in value or 'N/A' in value:
dicionario[key] = value.replace('R$ ', 'reais ').replace('%', ' porcento').replace('N/A', 'Nada')
print(dicionario)
But I think it only makes sense if a string can have more than one of these elements.
For example, if you have the string R$ 1,00 - 10%
, she would become reais 1,00 - 10 porcento
.
But if each string can only have one of these options (either it has only "R$", or it only has "%", etc), then it would not need to exchange all the possibilities, it would be enough to change only what it has:
# no caso de uma string só poder ter uma das opções
for key, value in dicionario.items():
if 'R$ ' in value:
dicionario[key] = value.replace('R$ ', 'reais ')
elif '%' in value:
dicionario[key] = value.replace('%', ' porcento')
elif 'N/A' in value:
dicionario[key] = value.replace('N/A', 'Nada')
Perform each substitution on the previous result.
– bfavaretto