Listas e dicionários aninhados em Python: guia prático
Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução
Pense em uma escola. Uma escola tem salas de aula. Cada sala tem alunos. Cada aluno tem um nome, uma idade e uma lista de notas. São dados dentro de dados dentro de dados: dados aninhados.
Dados aninhados estão em toda parte na programação de verdade. Uma rede social guarda usuários que têm posts, e cada post tem comentários. Um jogo guarda fases que contêm inimigos, e cada inimigo tem seus atributos. Uma loja on-line tem categorias com produtos, e os produtos têm avaliações.
Neste tutorial, você vai aprender a montar, acessar, modificar e percorrer listas e dicionários aninhados. Essas habilidades são essenciais para trabalhar com dados do mundo real, principalmente com JSON vindo de APIs da web.
Como funcionam listas dentro de listas?
Uma lista pode ter outras listas como itens. Isso cria uma estrutura bidimensional, como uma grade ou uma tabela. Pense em uma planilha: linhas e colunas.
['X', 'O', 'X'] ['O', 'X', 'O'] ['X', ' ', 'O']
Para acessar um item de uma lista aninhada, você usa dois pares de colchetes. O primeiro escolhe a linha. O segundo escolhe a coluna.
X X
Você também pode modificar itens com a mesma sintaxe de colchetes duplos. É assim que você marcaria uma jogada em um jogo da velha.
['X', ' ', 'X'] [' ', 'O', ' '] [' ', ' ', ' ']
Como funcionam dicionários aninhados?
O valor de um dicionário pode ser outro dicionário. Isso cria uma estrutura em forma de árvore, em que você desce pelas chaves até chegar ao dado de que precisa.
Ms. Smith 25
Cada par de colchetes desce um nível. school['Room 101'] entrega o dicionário interno. Depois, ['teacher'] entrega o valor dentro desse dicionário interno.
Você também pode adicionar chaves novas ou atualizar valores em qualquer nível.
Room 101: Ms. Smith teaches Algebra Room 103: Ms. Lee teaches Science
Listas de dicionários: o padrão mais comum
A estrutura aninhada mais comum na programação do dia a dia é a lista de dicionários. Cada dicionário representa um registro (um aluno, um produto, um usuário), e a lista reúne todos os registros.
Se você já viu dados vindos de uma API da web ou de um banco de dados, eles quase sempre têm a cara de uma lista de dicionários.
Alice 97 Alice is 15 and scored 92 Bob is 16 and scored 85 Charlie is 15 and scored 97
O padrão é sempre list[index][key]. O índice escolhe qual dicionário. A chave escolhe qual valor dentro desse dicionário.
Como acessar dados profundamente aninhados com segurança
Dados reais podem ter vários níveis de aninhamento. Uma empresa tem departamentos, cada departamento tem equipes, cada equipe tem membros. Acessar dados profundamente aninhados significa encadear vários colchetes.
Alice Diana
O perigo do aninhamento profundo é que qualquer chave ausente causa um KeyError. Se os dados puderem estar incompletos, use o método .get(), que retorna None (ou um valor padrão) em vez de travar o programa.
Python developer No site default
Como percorrer estruturas de dados aninhadas
Quando você tem dados aninhados, muitas vezes precisa de laços aninhados. O laço externo passa pelos itens do nível de cima, e o laço interno passa pelos itens dentro de cada um deles. Às vezes uma função faz o trabalho interno por você: no primeiro exemplo abaixo, sum() e len() cuidam de cada lista interna, então um único laço é suficiente.
Math: average = 87.5 English: average = 85.0 Science: average = 87.2
grid[0][0] = 1 grid[0][1] = 2 grid[0][2] = 3 grid[1][0] = 4 grid[1][1] = 5 grid[1][2] = 6 grid[2][0] = 7 grid[2][1] = 8 grid[2][2] = 9
Em listas de dicionários, um único laço costuma ser suficiente, porque cada dicionário é um registro completo.
Laptop: $999 Phone: $699
Como montar estruturas de dados aninhadas do zero
Nem sempre você recebe dados aninhados prontos: às vezes precisa montá-los você mesmo. Um padrão comum é começar com uma estrutura vazia e adicionar itens dentro de um laço.
a: ['apple', 'avocado'] b: ['banana', 'blueberry'] c: ['cherry', 'coconut']
Outra tarefa comum é transformar dados planos em estruturas aninhadas. Por exemplo, transformar listas separadas de nomes, idades e notas em uma lista de dicionários.
{'name': 'Alice', 'age': 15, 'grade': 92}
{'name': 'Bob', 'age': 16, 'grade': 85}
{'name': 'Charlie', 'age': 15, 'grade': 97}Exercícios práticos
Você tem uma grade de números 3x3. Exiba o valor do centro (linha 1, coluna 1) e depois o valor do canto inferior direito (linha 2, coluna 2). Cada um em uma linha separada.
Leia o código com atenção. O que ele vai exibir? Digite a saída exata.
Percorra a lista de alunos e encontre o que tem a maior nota. Exiba o nome e a nota dele no formato: Best: Name (Grade)
Agrupe as palavras em um dicionário de acordo com a primeira letra. Depois, exiba cada grupo em uma linha separada no formato: letter: [words]
Exiba as letras em ordem alfabética.
Este código tenta criar uma grade 3x3 e marcar só a célula do centro com "X". Mas algo está errado: execute e veja! Corrija o bug para que só a célula do centro seja "X" e todas as outras continuem como ".".
Exiba cada linha da grade em uma linha separada.
Você tem um dicionário em que cada chave é o nome de uma turma e cada valor é uma lista de dicionários de alunos. Calcule a nota média de cada turma e exiba no formato: ClassName: average
Arredonde cada média para 1 casa decimal. Exiba as turmas em ordem alfabética.