Variáveis individuais são ótimas para guardar um nome, uma idade, um preço. Mas e quando você precisa guardar 100 nomes? Criar 100 variáveis separadas seria insano. Estruturas de dados foram criadas para resolver exatamente isso: organizar coleções de valores de forma eficiente. Em Python, listas e dicionários são as estruturas mais usadas no dia a dia, e dominá-las abre portas para praticamente todo tipo de programa.
Listas: coleções ordenadas
Uma lista é uma sequência de valores na mesma variável, separados por vírgulas e envolvidos em colchetes. frutas = ["maçã", "banana", "laranja"] cria uma lista com 3 elementos. Listas podem misturar tipos: [1, "dois", 3.0, True] é válido em Python (embora seja raro e confuso na prática). A principal característica é que são ordenadas: os elementos mantêm a posição em que foram inseridos.
Acessar elementos pelo índice é a operação mais básica. O índice começa em 0 (não em 1!): o primeiro elemento é frutas[0], o segundo é frutas[1]. Índices negativos contam do final: frutas[-1] é sempre o último elemento, frutas[-2] é o penúltimo. Tentar acessar um índice que não existe gera um IndexError — um dos erros mais comuns no começo.
Operações essenciais em listas
.append(valor) adiciona um elemento ao final — é o método mais usado. .insert(indice, valor) insere em uma posição específica. .remove(valor) remove a primeira ocorrência de um valor. del lista[indice] remove pelo índice. .pop() remove e retorna o último elemento (útil para usar listas como pilhas). len(lista) retorna o tamanho.
Slicing (fatiamento) é uma das features mais elegantes do Python: frutas[1:3] retorna uma nova lista com os elementos do índice 1 até o 2 (o índice final é excludente). frutas[:2] pega os dois primeiros. frutas[2:] pega do terceiro até o final. frutas[::-1] retorna a lista invertida. Esse sistema de slicing funciona também em strings, o que torna manipulação de texto muito expressiva.
Percorrendo listas com for
O loop for do Python foi feito para iterar sobre coleções. for fruta in frutas: itera elemento por elemento, e dentro do loop fruta é cada elemento da vez. Isso é chamado de iteração implícita — você não precisa gerenciar índices manualmente como faria em C ou Java. Quando você precisa do índice e do elemento ao mesmo tempo, enumerate é a solução: for i, fruta in enumerate(frutas): dá acesso a ambos.
List comprehension é uma forma compacta de criar listas a partir de outras listas: [x * 2 for x in numeros] cria uma nova lista com cada número dobrado. [x for x in numeros if x > 0] filtra apenas os positivos. É um dos recursos mais pythônicos da linguagem — código mais curto e mais expressivo que o equivalente com loop explícito e append.
Dicionários: pares de chave e valor
Se listas são sequências onde a posição identifica o elemento, dicionários são coleções onde um nome (chave) identifica o valor. pessoa = {"nome": "Carlos", "idade": 22, "curso": "Ciência da Computação"} cria um dicionário onde você acessa os valores pela chave: pessoa["nome"] retorna “Carlos”, pessoa["idade"] retorna 22. As chaves são geralmente strings, mas podem ser qualquer tipo imutável (int, tuple).
Adicionar ou atualizar é igual: pessoa["email"] = "carlos@email.com" adiciona a chave “email” se não existir ou atualiza se já existir. del pessoa["curso"] remove uma chave. .get("chave", valor_padrao) é mais seguro que o acesso direto: se a chave não existir, retorna o valor padrão em vez de lançar um KeyError. Use .get() quando não tem certeza se a chave existe.
Iterando sobre dicionários
Dicionários têm três formas de iteração: .keys() retorna todas as chaves, .values() retorna todos os valores, e .items() retorna pares (chave, valor). O padrão mais comum é for chave, valor in dicionario.items():, que dá acesso a ambos em cada iteração. Em Python 3.7+, dicionários mantêm a ordem de inserção — diferente de versões anteriores onde a ordem era aleatória.
Uma estrutura muito comum no mundo real é a lista de dicionários: cada dicionário representa um registro, e a lista agrupa todos. [{"nome": "Ana", "nota": 8.5}, {"nome": "Bruno", "nota": 7.0}] é basicamente uma tabela. Ordenar essa lista por nota é simples: sorted(alunos, key=lambda a: a["nota"], reverse=True). Entender listas e dicionários é, na prática, entender como trabalhar com dados no mundo real — JSON, APIs, planilhas e bancos de dados todos se mapeiam naturalmente para essas estruturas.
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.