🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Domine as Coleções do Python! Guia Completo de Listas e Dicionários

Para executar Python no prompt de comando ou PowerShell no seu PC, é necessário baixar e instalar o Python.
Se ainda não o fez, consulte o artigo Instalação do Python e configuração do ambiente de desenvolvimento para instalar o Python.

Na criação de sites e no desenvolvimento de aplicações, existem muitas situações em que você deseja manipular múltiplos dados de forma eficiente, certo? Por exemplo, uma lista de posts de blog, uma lista de produtos de um e-commerce, informações de usuários, etc. — tudo isso são "conjuntos de dados". O Python oferece um mecanismo poderoso para gerenciar esses conjuntos de dados de forma inteligente, chamado de "coleções".

Neste artigo, vamos focar nas coleções mais importantes do Python, as "listas" e os "dicionários", explicando de forma clara desde o básico até as aplicações, com muitos exemplos de código que você pode copiar e colar para ver funcionando na hora, mesmo que seja um criador web iniciante. Vamos juntos elevar o nível de suas habilidades de manipulação de dados, experimentando um código que "funciona" de verdade!

1. As "Listas": Organizando Dados em Ordem

A primeira coisa que vamos aprender são as "listas". Uma lista é a coleção mais fundamental, que permite armazenar múltiplos dados em uma ordem sequencial. Como o nome sugere, é perfeita para lidar com dados onde a ordem é importante, como uma lista de compras ou uma lista de tarefas. Na criação para a web, é útil para gerenciar itens de um menu de navegação, uma lista de tags de um post de blog ou uma lista de nomes de arquivos de uma galeria de imagens.

Como criar uma lista

Criar uma lista é muito fácil. Basta envolver os dados entre colchetes [] e separar cada item com uma vírgula ,. Você pode incluir números, strings e até mesmo listas dentro de outras listas.

# Criar uma lista de strings
frutas = ["Maçã", "Banana", "Laranja"]
print(frutas)

# Criar uma lista de números
numeros = [1, 2, 3, 4, 5]
print(numeros)

# Também é possível misturar diferentes tipos de dados
lista_mista = [1, "Olá", True, 3.14]
print(lista_mista)

Resultado da Execução:

['Maçã', 'Banana', 'Laranja']
[1, 2, 3, 4, 5]
[1, 'Olá', True, 3.14]

Acessando elementos (Índice)

Para obter um dado específico (elemento) de uma lista, usa-se um número chamado "índice". O ponto importante a se notar é que os índices começam em 0. O primeiro elemento é o [0], o segundo é o [1], e assim por diante.

frutas = ["Maçã", "Banana", "Laranja"]

# Obter o primeiro elemento (índice 0)
primeira_fruta = frutas[0]
print(f"Primeira fruta: {primeira_fruta}")

# Obter o terceiro elemento (índice 2)
terceira_fruta = frutas[2]
print(f"Terceira fruta: {terceira_fruta}")

Resultado da Execução:

Primeira fruta: Maçã
Terceira fruta: Laranja

Adicionando elementos (append)

Para adicionar um novo elemento ao final de uma lista, usa-se o método append(). É como adicionar um novo post de blog ao final da lista.

frutas = ["Maçã", "Banana", "Laranja"]
print(f"Antes de adicionar: {frutas}")

# Adicionar "Uva" ao final da lista
frutas.append("Uva")
print(f"Depois de adicionar: {frutas}")

Resultado da Execução:

Antes de adicionar: ['Maçã', 'Banana', 'Laranja']
Depois de adicionar: ['Maçã', 'Banana', 'Laranja', 'Uva']

Alterando elementos

Você também pode alterar um elemento existente para um novo valor, especificando seu índice.

frutas = ["Maçã", "Banana", "Laranja"]
print(f"Antes de alterar: {frutas}")

# Alterar o segundo elemento (índice 1) para "Kiwi"
frutas[1] = "Kiwi"
print(f"Depois de alterar: {frutas}")

Resultado da Execução:

Antes de alterar: ['Maçã', 'Banana', 'Laranja']
Depois de alterar: ['Maçã', 'Kiwi', 'Laranja']

Removendo elementos (del)

Para remover um elemento especificando seu índice, usa-se a instrução del.

frutas = ["Maçã", "Banana", "Laranja", "Uva"]
print(f"Antes de remover: {frutas}")

# Remover o terceiro elemento (índice 2)
del frutas[2]
print(f"Depois de remover: {frutas}")

Resultado da Execução:

Antes de remover: ['Maçã', 'Banana', 'Laranja', 'Uva']
Depois de remover: ['Maçã', 'Banana', 'Uva']

Verificando o tamanho de uma lista (len)

Para saber quantos elementos uma lista contém, a função len() é muito útil. Ela pode ser usada, por exemplo, para exibir o número total de posts de um blog.

frutas = ["Maçã", "Banana", "Laranja", "Uva"]
quantidade_de_itens = len(frutas)

print(f"Existem {quantidade_de_itens} elementos na lista.")

Resultado da Execução:

Existem 4 elementos na lista.

2. Os "Dicionários": Gerenciando com Chaves e Valores

O próximo que vamos apresentar é o "dicionário", uma estrutura de dados extremamente poderosa e muito utilizada no desenvolvimento web. Enquanto as listas gerenciam dados por um número (índice), os dicionários gerenciam dados em pares de um nome chamado "chave" e um "valor" correspondente.

É como uma agenda de contatos onde um nome (chave) está associado a um número de telefone (valor). É ideal para quando a ordem não importa e você quer acessar rapidamente um valor através de uma chave específica. É perfeito para gerenciar informações de membros de um site (nome_usuario: "João", idade: 25...) ou configurações (cor_tema: "#333", tamanho_fonte: "16px"...).

Como criar um dicionário

Um dicionário é criado usando chaves {}, com pares chave: valor separados por vírgulas ,. Geralmente, strings são usadas como chaves.

# Criar informações de usuário com um dicionário
usuario = {
  "nome": "João Silva",
  "idade": 30,
  "email": "joao@example.com",
  "eh_admin": False
}

print(usuario)

Resultado da Execução:

{'nome': 'João Silva', 'idade': 30, 'email': 'joao@example.com', 'eh_admin': False}

Acessando valores (por Chave)

Para obter um valor de um dicionário, você usa a "chave" em vez do índice de uma lista. Escreve-se como nome_do_dicionario[chave].

usuario = {
  "nome": "João Silva",
  "idade": 30,
  "email": "joao@example.com"
}

# Obter o valor correspondente à chave "nome"
nome_usuario = usuario["nome"]
print(f"Nome de usuário: {nome_usuario}")

# Obter o valor correspondente à chave "idade"
idade_usuario = usuario["idade"]
print(f"Idade: {idade_usuario}")

Resultado da Execução:

Nome de usuário: João Silva
Idade: 30

Adicionando e atualizando valores

Adicionar um novo par chave-valor a um dicionário ou atualizar o valor de uma chave existente é fácil. Se você atribuir um valor a uma nova chave, ela será adicionada. Se a chave já existir, seu valor será atualizado.

usuario = {
  "nome": "João Silva",
  "idade": 30
}
print(f"Antes da operação: {usuario}")

# Adicionar uma nova chave "cidade"
usuario["cidade"] = "São Paulo"
print(f"Depois de adicionar: {usuario}")

# Atualizar o valor da chave "idade"
usuario["idade"] = 31
print(f"Depois de atualizar: {usuario}")

Resultado da Execução:

Antes da operação: {'nome': 'João Silva', 'idade': 30}
Depois de adicionar: {'nome': 'João Silva', 'idade': 30, 'cidade': 'São Paulo'}
Depois de atualizar: {'nome': 'João Silva', 'idade': 31, 'cidade': 'São Paulo'}

Removendo elementos (del)

Assim como nas listas, você pode remover um par chave-valor específico usando a instrução del e a chave.

usuario = {
  "nome": "João Silva",
  "idade": 30,
  "email": "joao@example.com"
}
print(f"Antes de remover: {usuario}")

# Remover a chave "email" e seu valor correspondente
del usuario["email"]
print(f"Depois de remover: {usuario}")

Resultado da Execução:

Antes de remover: {'nome': 'João Silva', 'idade': 30, 'email': 'joao@example.com'}
Depois de remover: {'nome': 'João Silva', 'idade': 30}

Obtendo uma lista de chaves ou valores

Se você quiser obter uma lista de todas as chaves ou valores de um dicionário, métodos como keys(), values() e items() são muito úteis.

usuario = {
  "nome": "João Silva",
  "idade": 30,
  "cidade": "São Paulo"
}

# Obter todas as chaves
print(f"Lista de chaves: {usuario.keys()}")

# Obter todos os valores
print(f"Lista de valores: {usuario.values()}")

# Obter todos os pares chave-valor como uma lista de tuplas
print(f"Pares chave-valor: {usuario.items()}")

Resultado da Execução:

Lista de chaves: dict_keys(['nome', 'idade', 'cidade'])
Lista de valores: dict_values(['João Silva', 30, 'São Paulo'])
Pares chave-valor: dict_items([('nome', 'João Silva'), ('idade', 30), ('cidade', 'São Paulo')])

3. Aplicação Prática: Vamos Gerar uma Página de Produtos Dinâmica com Python!

Combinando as listas e dicionários que aprendemos até agora, você pode realizar tarefas muito práticas. Aqui, veremos um exemplo de como gerenciar uma lista de produtos de um e-commerce em Python e gerar o HTML a partir dela. Este é o conceito fundamental por trás do que frameworks web (como Django ou Flask) fazem internamente.

Primeiro, definimos os dados dos produtos em Python como uma "lista de dicionários". Cada produto é um único dicionário contendo informações como nome do produto, preço e nome do arquivo de imagem.

<!-- Este é um exemplo de código Python que seria executado em um servidor web para gerar o HTML abaixo -->
#
# import html
#
# # Lista de dados de produtos (cada produto é um dicionário)
# products = [
#     {
#         "name": "Camiseta de Algodão Orgânico",
#         "price": 4500,
#         "image": "tshirt.jpg",
#         "description": "Uma camiseta de algodão 100% orgânico com um toque macio."
#     },
#     {
#         "name": "Tênis de Lona",
#         "price": 8200,
#         "image": "sneakers.jpg",
#         "description": "Tênis de lona clássico, fácil de combinar com qualquer estilo."
#     },
#     {
#         "name": "Mochila de Couro",
#         "price": 19800,
#         "image": "backpack.jpg",
#         "description": "Uma mochila de couro genuíno que fica melhor com o tempo."
#     }
# ]
#
# # Gerar o HTML
# html_content = ""
# for product in products:
#     # Não se esqueça de escapar o HTML
#     name_esc = html.escape(product["name"])
#     desc_esc = html.escape(product["description"])
#     img_esc = html.escape(product["image"])
#
#     html_content += f"""
# <div class="product-card">
#   <img src="images/{img_esc}" alt="{name_esc}">
#   <h3>{name_esc}</h3>
#   <p class="price">R${product['price']:,}</p>
#   <p>{desc_esc}</p>
# </div>
# """
#
# # Este html_content seria escrito em um arquivo ou passado para um template de um framework web
# # print(html_content)
#

Executar o código Python acima gera um código HTML como o seguinte. Se você abrir isso em um navegador, a lista de produtos será exibida. Esse conceito de "separar dados da apresentação" é a chave para uma produção web eficiente.

👇Exemplo de HTML completo e funcional👇
Copie o código abaixo, salve-o como um arquivo com o nome produtos.html e abra-o no seu navegador. (※ As imagens não serão exibidas, mas você pode verificar o layout).

<!DOCTYPE html>
<html lang="pt">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Lista de Produtos</title>
  <style>
    body {
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
      background-color: #f4f7f6;
      color: #333;
      margin: 0;
      padding: 2rem;
    }
    .container {
      max-width: 1200px;
      margin: 0 auto;
    }
    h1 {
      text-align: center;
      color: #2c3e50;
      margin-bottom: 2rem;
    }
    .product-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
      gap: 2rem;
    }
    .product-card {
      background-color: #fff;
      border-radius: 8px;
      box-shadow: 0 4px 15px rgba(0,0,0,0.1);
      overflow: hidden;
      transition: transform 0.3s, box-shadow 0.3s;
    }
    .product-card:hover {
      transform: translateY(-5px);
      box-shadow: 0 8px 25px rgba(0,0,0,0.15);
    }
    .product-card img {
      width: 100%;
      height: 200px;
      object-fit: cover;
      background-color: #eee;
    }
    .product-card h3 {
      font-size: 1.25rem;
      margin: 1rem 1.5rem 0.5rem;
      color: #34495e;
    }
    .product-card .price {
      font-size: 1.2rem;
      font-weight: bold;
      color: #e74c3c;
      margin: 0 1.5rem;
    }
    .product-card p {
      font-size: 0.95rem;
      line-height: 1.6;
      margin: 0.5rem 1.5rem 1.5rem;
      color: #7f8c8d;
    }
  </style>
</head>
<body>

  <div class="container">
    <h1>Produtos Recomendados</h1>
    <div class="product-grid">
      
      <div class="product-card">
        <img src="images/tshirt.jpg" alt="Camiseta de Algodão Orgânico">
        <h3>Camiseta de Algodão Orgânico</h3>
        <p class="price">R$4,500</p>
        <p>Uma camiseta de algodão 100% orgânico com um toque macio.</p>
      </div>
      
      <div class="product-card">
        <img src="images/sneakers.jpg" alt="Tênis de Lona">
        <h3>Tênis de Lona</h3>
        <p class="price">R$8,200</p>
        <p>Tênis de lona clássico, fácil de combinar com qualquer estilo.</p>
      </div>
      
      <div class="product-card">
        <img src="images/backpack.jpg" alt="Mochila de Couro">
        <h3>Mochila de Couro</h3>
        <p class="price">R$19,800</p>
        <p>Uma mochila de couro genuíno que fica melhor com o tempo.</p>
      </div>

    </div>
  </div>

</body>
</html>

4. Dicas que Fazem a Diferença! Pontos de Atenção e Como Escolher

Listas e dicionários são muito úteis, mas há alguns pontos de atenção que você deve conhecer. Compreendê-los levará a uma programação mais avançada e ajudará a evitar erros inesperados.

Lista vs. Dicionário: como escolher?

Até mesmo no conteúdo de um site, você naturalmente se verá usando uma lista para os itens de um menu de navegação, onde a ordem é importante, e um dicionário para as configurações gerais do site, que você deseja gerenciar por "chave".

Cuidado ao "copiar" uma lista!

Esta é uma das armadilhas comuns para iniciantes. Se você simplesmente atribuir uma lista a outra variável com =, a lista em si não é copiada. Em vez disso, a "localização (referência)" da lista é copiada. Como resultado, alterar uma também alterará a outra.

# Exemplo de cópia incorreta
lista_a = [1, 2, 3]
lista_b = lista_a  # Isto não é uma cópia do conteúdo!

print(f"Antes da alteração: lista_a = {lista_a}, lista_b = {lista_b}")

# Se você alterar a lista_b...
lista_b.append(4)

# Surpreendentemente, a lista_a também muda!
print(f"Depois da alteração: lista_a = {lista_a}, lista_b = {lista_b}")

Resultado da Execução:

Antes da alteração: lista_a = [1, 2, 3], lista_b = [1, 2, 3]
Depois da alteração: lista_a = [1, 2, 3, 4], lista_b = [1, 2, 3, 4]

Para evitar isso, use o método copy() para criar uma lista nova e completamente independente.

# Exemplo de cópia correta
lista_a = [1, 2, 3]
lista_c = lista_a.copy() # Use o método copy()

print(f"Antes da alteração: lista_a = {lista_a}, lista_c = {lista_c}")

# Mesmo que você altere a lista_c...
lista_c.append(4)

# a lista_a não é afetada!
print(f"Depois da alteração: lista_a = {lista_a}, lista_c = {lista_c}")

Resultado da Execução:

Antes da alteração: lista_a = [1, 2, 3], lista_c = [1, 2, 3]
Depois da alteração: lista_a = [1, 2, 3], lista_c = [1, 2, 3, 4]

5. E tem mais! Outras coleções úteis

O Python possui outras coleções úteis além de listas e dicionários. Aqui, apresentaremos brevemente duas delas.

Tuplas (Tuple)

Uma tupla, em resumo, é uma "lista que não pode ser alterada". Para criar uma, basta trocar os colchetes [] de uma lista por parênteses (). Uma vez criada, você não pode adicionar, alterar ou remover elementos. Isso a torna adequada para gerenciar dados que você não quer que mudem durante a execução do programa, como constantes.

# Definir um código de cor RGB com uma tupla
cor_vermelha = (255, 0, 0)
print(f"Valor RGB para vermelho: {cor_vermelha}")

# Acessar o primeiro elemento
print(f"Valor R: {cor_vermelha[0]}")

# Tentar alterar resultará em um erro
# cor_vermelha[0] = 200 # TypeError: 'tuple' object does not support item assignment

Resultado da Execução:

Valor RGB para vermelho: (255, 0, 0)
Valor R: 255

Conjuntos (Set)

Um conjunto é uma coleção "sem ordem e sem valores duplicados". Ele usa chaves {} como um dicionário, mas armazena apenas valores, não pares chave-valor. Seus principais usos são remover elementos duplicados de uma lista ou encontrar elementos comuns ou diferentes entre várias listas.

# Uma lista com duplicatas
numeros = [1, 2, 2, 3, 4, 4, 4, 5]
print(f"Lista original: {numeros}")

# Converter para conjunto para remover duplicatas
numeros_unicos = set(numeros)
print(f"Conjunto com duplicatas removidas: {numeros_unicos}")

# Converter de volta para lista
lista_unica = list(numeros_unicos)
print(f"Convertido de volta para lista: {lista_unica}")

Resultado da Execução:

Lista original: [1, 2, 2, 3, 4, 4, 4, 5]
Conjunto com duplicatas removidas: {1, 2, 3, 4, 5}
Convertido de volta para lista: [1, 2, 3, 4, 5]

Resumo

Neste artigo, cobrimos o núcleo das estruturas de dados do Python, as "listas" e os "dicionários", desde o uso básico até exemplos de aplicação na criação para a web.

Dominar essas coleções aumentará drasticamente sua eficiência de programação em Python. Especialmente no mundo do desenvolvimento web, o fluxo de trabalho básico é tratar os dados recuperados de um banco de dados como listas ou dicionários e, em seguida, gerar o HTML. Sinta-se à vontade para executar o código deste artigo e experimentar por si mesmo a diversão de manipular dados!

Próximo passo:
Depois de se sentir à vontade para manipular dados, o próximo passo é aprender a ler dados de arquivos e salvar os resultados do processamento em arquivos. O artigo a seguir explica isso em detalhes.
Como Ler e Escrever Arquivos em Python (E/S)