Hoje vamos dar uma olhada detalhada nos dicionários, que são um tipo especial de coleção em Python. Abordaremos sua funcionalidade básica, seu funcionamento interno e também alguns recursos de ponta da última versão do Python.

Ao final deste tutorial, você saberá

  • Quais dicionários são
  • Como trabalhar com dicionários
  • Como iterar em dicionários
  • Como copiar dicionários
  • Como mesclar dicionários em Python 3.9

O que são dicionários em Python?

Antes de aprender algo em profundidade, é sempre bom começar com uma definição simples e básica.

Como já disse, os dicionários são um tipo de coleção em Python. No entanto, em contraste com listas, tuplas e conjuntos, você não armazena valores individuais, mas os chamados pares de valor-chave. Isso significa que, em vez de se referir aos seus valores por meio de um índice, você usa uma chave, que é um identificador exclusivo.

l1 = [10, "Hello", True, 20.23] # Listt1 = (10, "Hello", True, 20.23) # Tuples1 = {10, "Hello", True, 20.23} # Setd1 = {'number': 10,      'greeting': "Hello",      'boolean': True,      'float': 20.23} # Dictionary

No exemplo acima, você pode ver a diferença. Os pares de valores-chave individuais são separados por vírgulas. Cada par começa com uma chave exclusiva seguida por dois pontos e o respectivo valor. Observe que o valor não precisa ser exclusivo, pois não o estamos usando para acessar ou identificar nada.

Lembre-se também de que podemos usar qualquer tipo de dados para as chaves e valores desejados. Aqui, usamos apenas strings para os identificadores, mas também podemos usar inteiros, flutuantes, coleções ou até mesmo booleanos.

No entanto, você deve sempre se perguntar o quão razoável isso é. Na maioria das vezes, uma string será a melhor escolha.

Como trabalhar com dicionários em Python

Tudo bem, agora que sabemos o que são dicionários, vamos dar uma olhada em como trabalhar com eles.

Primeiro, veremos as operações básicas como acessar, adicionar e remover valores. Depois disso, examinaremos alguns tópicos mais avançados e interessantes.

Você pode acessar elementos de um dicionário em Python da mesma forma que acessa elementos de qualquer outra coleção. A única diferença é que você passa uma chave em vez de um índice. Isso também vale para alterar e até mesmo adicionar valores.

person = {'name': "Mike", 'age': 25, 'weight': 80.5}print(person['name'])person['name'] = "Bob" # Changing existing valueprint(person['name'])person['gender'] = 'm' # Creating new key-value pairprint(person['gender'])

Como você pode ver aqui, basta passar uma chave para acessar o valor a que se refere. Primeiro você imprime o nome e depois o altera. Em seguida, imprima-o novamente para certificar-se de que as alterações foram feitas.

Observe que isso não funciona apenas para pares já existentes, mas também para novos. Para criar um novo par de valores-chave, basta referir-se a uma chave que ainda não existe e atribuir um valor a ela. O par é então adicionado ao dicionário automaticamente.

Remover valores de um dicionário funciona de maneira diferente. Aqui você pode usar o del palavra-chave ou o pop () método.

A principal diferença entre essas duas abordagens é que del remove apenas o par de valores-chave, enquanto pop () também retorna o valor removido posteriormente. Dependendo do seu caso de uso, você terá que decidir qual método se encaixa melhor em sua tarefa.

Como fazer iteração em dicionários em Python

Como os dicionários são coleções, você também pode iterar sobre eles. Mas isso não é tão simples e direto como acontece com os outros tipos de coleção.

Isso ocorre porque você não está lidando com valores individuais, mas com pares. Quando você itera em um dicionário, usando um loop for, na verdade está apenas iterando nas chaves.

names_ages = {'Bob': 50,              'Anna': 28,              'Max': 30,              'John': 76}for element in names_ages:    print(element)    # Output: Bob  Anna  Max  John

Portanto, se você deseja iterar os valores ou mesmo os pares inteiros, é necessário usar métodos adicionais.

Para acessar os valores, basta chamar o valores () método. Ele retorna um iterador para todos os valores do dicionário.

Para acessar os pares completos, você pode ligar para o Itens() método. Aqui você itera sobre uma lista de tuplas, onde cada tupla representa um par de valor-chave.

Claro, também há o chaves() , caso você queira trabalhar com as chaves de dicionário fora de um loop for.

print(list(names_ages.keys()))print(list(names_ages.values()))print(list(names_ages.items()))# Output# > ['Bob', 'Anna', 'Max', 'John']# > [50, 28, 30, 76]# > [('Bob', 50), ('Anna', 28), ('Max', 30), ('John', 76)]

Uma coisa importante a ter em mente aqui é que esses métodos não retornam listas reais. Eles retornam objetos, que você pode usar para iterar as chaves e valores. Mas você pode facilmente inserir esses objetos em listas usando o Lista() função.

Como copiar dicionários em Python

Agora estamos entrando em coisas mais avançadas.

Você não acreditaria quantas vezes programadores novos e inexperientes enfrentam problemas porque copiam coleções da maneira errada. Eles solucionam problemas em seus projetos por horas e não conseguem encontrar o problema.

Portanto, preste atenção aqui se você não quiser experimentar essa frustração.

Antes de falarmos sobre como copiar coleções e dicionários, vamos ver como você normalmente copia tipos de dados primitivos como inteiros.

i1 = 20i2 = i1i2 += 10print(i1, i2)# Output: 20  30

Quando você deseja criar uma nova variável e copiar o valor de outro inteiro para ela, basta atribuir diretamente a variável. Então você pode alterar o valor do segundo inteiro e trabalhar com ele, sem alterar nada sobre o primeiro.

Isso também funciona para Booleanos, Flutuantes, Strings etc. Porém, vamos ver o que acontece, quando fazemos isso com um dicionário.

d1 = {'a': 10, 'b': 20, 'c': 30}d2 = d1d2['c'] = 50print(d1)print(d2)# Output# {'a': 10, 'b': 20, 'c': 50}# {'a': 10, 'b': 20, 'c': 50}

O que aconteceu aqui? Não fizemos a mesma coisa de antes? Por que o primeiro dicionário muda, quando modificamos o segundo? Não é apenas uma cópia?

A resposta é um claro não. Quando você atribui um dicionário a uma nova variável, na verdade está passando uma chamada referência.

A segunda variável não é realmente um dicionário, mas apenas outra variável apontando para o mesmo dicionário que a primeira. Portanto, não importa em qual variável você aplica as alterações, uma vez que todas são realizadas no único dicionário ao qual ambos estão se referindo.

Se você deseja criar uma cópia real superficial de um dicionário em Python, você precisa usar o dict () função ou chame o cópia de() método do dicionário. Ao fazer isso, você cria um novo dicionário que possui os mesmos elementos do original.

d1 = {'a': 10, 'b': 20, 'c': 30}d2 = dict(d1)d3 = d1.copy()d2['b'] = 50d3['a'] = -90print(d1) # unchanged

Observe, entretanto, que os objetos dentro da cópia ainda são exatamente os mesmos objetos do primeiro dicionário. Portanto, se eles forem objetos ou coleções mais complexos, você acabará com um novo dicionário separado (mas os objetos dentro dele farão referência aos mesmos objetos que os do primeiro dicionário).

Para mudar isso, você teria que fazer uma chamada cópia profunda, mas isso não está no escopo deste artigo.

Como mesclar dicionários em Python

Por último, mas não menos importante, vamos falar sobre os recursos de dicionário de ponta do Python 3.9. Esses recursos estão focados na fusão de dicionários.

Até recentemente, os programadores tinham que usar o atualizar() método ou fazer uso dos operadores de desempacotamento.

d1 = {'a': 10, 'b': 20, 'c': 30}d2 = {'c': 40, 'd': 60, 'e': 20}d1.update(d2)print(d1)d1 = {'a': 10, 'b': 20, 'c': 30}d3 = {**d1, **d2}print(d3)

A principal diferença entre essas duas abordagens é que o atualizar() método adiciona os valores de um dicionário a outro e aplica as alterações diretamente. O dicionário resultante não é retornado, mas realmente salvo no primeiro objeto.

Ao usar os operadores de desempacotamento, por outro lado, você cria um novo dicionário e coloca nele os pares de valores-chave dos dois dicionários, descompactando-os.

Agora você pode estar se perguntando o que acontece quando você mescla dois dicionários que têm a mesma chave dentro deles.

Você pode pensar assim: O primeiro dicionário cria o par de valores-chave e o segundo o substitui. Portanto, se você chamar o método update na primeira coleção e passar a segunda coleção como um argumento, o par de valores-chave do segundo dicionário acabará no resultado.

O mesmo vale para a descompactação. Qualquer dicionário que você passar por último substituirá os anteriores.

Portanto, esta é a velha maneira de fazer as coisas. No Python 3.9, entretanto, os operadores de fusão e atualização foram introduzidos. Eles simplificam a junção de dicionários.

d1 = {'a': 10, 'b': 20, 'c': 30}d2 = {'c': 40, 'd': 60, 'e': 20}d3 = d1 | d2  # Mergingd1 |= d2      # Updating

Como você pode ver, o operador para mesclar é o mesmo usado para a operação OR bit a bit. A ordem dos dicionários é importante se você tiver chaves idênticas em ambos os dicionários. A coleção à direita substitui a coleção à esquerda.

Se você quiser atualizar o primeiro dicionário em vez de retornar um novo, basta combinar o operador de fusão com o operador de atribuição básico. Essa forma de mesclar dicionários é o método recomendado desde o Python 3.9.

Se você for um aluno mais visual ou auditivo, pode assistir ao meu tutorial em vídeo sobre a fusão de dicionários abaixo.

Empacotando

Tudo bem, agora você deve estar muito confortável ao trabalhar com dicionários. Você não apenas sabe o que são e como usá-los, mas também entende como funcionam em um nível mais profundo.

Ao trabalhar em um projeto, você saberá como copiar dicionários da maneira certa. Nós até cobrimos um dos recursos de ponta da última versão do Python.

Certifique-se de ler os trechos de código mais uma vez e entender como e por que eles funcionam. Isso o tornará um programador Python muito melhor.

Se você estiver interessado em mais conteúdo como este, pode conferir meu canal no YouTube NeuralNine ou meu site neuralnine.com.

Para os entusiastas do Python, tenho uma série especial de livros sobre Python que ensina a linguagem do zero e também aborda tópicos mais avançados, como aprendizado de máquina e visão computacional. Você pode encontrá lo aqui.

Espero que tenham gostado deste artigo e desejo um ótimo dia! 🙂