Veja como lidar com strings repetidamente usando listas e dicionários no Python.
Este post é complemento do primeiro vídeo da série Como pensar como um programador e resolver problemas. No vídeo — que você pode conferir no final do post — temos uma demanda da empresa Dr. Paçoca: alterar os códigos dos produtos.
A Dr. Paçoca produz paçocas em dois formatos: tabletes e cilindros. As em tabletes possuem código começando com TAB e as em cilindro, com CIL. Os dois formatos recebem quatro dígitos depois das iniciais. Dessa forma, os códigos completos ficam: TAB1234 e CIL9876.
A empresa quer mudar o TAB para T + 00 (dois zeros) e CIL para C + 00 (dois zeros). Usando os exemplos do parágrafo anterior, TAB1234 ficaria T001234.
Criamos esse código (se quiser conferir detalhes, dê uma olhada no vídeo!):
# Projeto 1 - Troca de código
# SET CodOrig
# SET CodNovo = CodOrig.REPLACE(”TAB”, “T00”)
# SET CodNovo = CodNovo.REPLACE(“CIL”, “C00”)
# PRINT(CodNovo)
codOriginal = "TAB1234"
codNovo = codOriginal.replace("TAB", "T00") # T001234
codNovo = codNovo.replace("CIL", "C00") # Se pegar o original, volta a ser TAB1234! Cuidado
print(codNovo)
Mas queremos agora transformar um conjunto de códigos de uma vez só ao invés de fazermos um a um. Podemos fazer isso de duas formas: usando listas ou dicionários.
Vamos ver primeiro usando listas: o código é praticamente o mesmo. O que muda é que os replaces vão ser executados dentro de um loop para serem repetidos para cada código da lista:
# Projeto 1: Variação com lista
# Pega lista de códigos
listaOriginal = ["TAB1234", "CIL2456", "TAB9385", "TAB9500", "CIL2211"]
# Inicializa nova lista para guardar os novos códigos
listaNova = [] # lista vazia
# Para cada item da lista
for codOriginal in listaOriginal:
# Faz os replaces
codNovo = codOriginal.replace("TAB", "T00") # T001234
codNovo = codNovo.replace("CIL", "C00") # Se pegar o original, volta a ser TAB1234! Cuidado
# Insere o código novo na lista nova
listaNova.append(codNovo)
print(listaNova)
Para um dicionário, também vamos precisar “rodar” com o loop. Mas temos que ver primeiro qual é a estrutura do dicionário: se o código está como chave ou como valor. Neste exemplo, o código está como valor e a chave é uma numeração sequencial (lembre-se de que as chaves do dicionário não podem ser repetidas):
# Projeto 1: Variações para o site
# Variação com dicionário - Códigos como valores
# Pega lista de códigos
dicOriginal = {1 : "TAB1234", 2 : "CIL2456", 3 : "TAB9385",
4 : "TAB9500", 5 : "CIL2211"}
# Inicializa novo dicionário para guardar os novos códigos
dicNovo = {} # dicionário vazio
# Para cada item da lista
for chave, codOriginal in dicOriginal.items():
# Faz os replaces
codNovo = codOriginal.replace("TAB", "T00")
codNovo = codNovo.replace("CIL", "C00")
# Insere o código no novo dicionário, com a mesma chave
dicNovo[chave] = codNovo
# Se quiser usar o mesmo dicionário:
# dicOriginal[chave] = codNovo
print(dicNovo)
Já no exemplo abaixo, os códigos estão como chave. Os valores do dicionário são, neste caso, a descrição de cada produto.
Neste exemplo, não tem jeito: temos que criar um dicionário novo porque o Python vai “reclamar” se mudarmos a chave durante a iteração.
# Projeto 1: Variações para o site
# Variação com dicionário - Códigos como chaves
# Pega dicionário de códigos
# Valor é a descrição de cada produto
dicOriginal = {"TAB1234" : "Tablete da Turma do Paçoquinha",
"CIL2456" : "Cilindro da Pamoninha",
"TAB9385" : "Tablete clássico", "TAB9500" : "Tablete gigante",
"CIL2211": "Cilindo clássico"}
dicNovo = {}
# Para cada item do dicionário
for codOriginal in dicOriginal.keys(): # Não vamos precisar dos valores
# Faz os replaces
codNovo = codOriginal.replace("TAB", "T00") # ATENÇÃO: o código é a chave
codNovo = codNovo.replace("CIL", "C00")
# Troca o código no dicionário, com a mesma chave
# Copia para o novo dicionário e remove o antigo
dicNovo[codNovo] = dicOriginal[codOriginal]
print(dicNovo)
Projeto original
Você confere o projeto original no vídeo abaixo: