Domine Dicionários Python: 10 Métodos Essenciais

Interessado em dominar o trabalho com dicionários em Python? Este guia prático explora os métodos essenciais para leitura, modificação e diversas operações comuns em dicionários Python.

Começaremos com uma revisão dos fundamentos dos dicionários, seguido pela criação de um dicionário de exemplo que será manipulado usando os métodos disponíveis.

Vamos iniciar…

Explorando os Dicionários em Python

Dicionários são estruturas de dados nativas do Python, projetadas para armazenar informações em pares chave-valor. Eles estabelecem uma relação ou mapeamento entre chaves e seus respectivos valores.

É crucial que as chaves em um dicionário sejam únicas (e, portanto, hasháveis). Você pode usar a chave para localizar o valor correspondente ou utilizar os métodos integrados que exploraremos em breve.

Ao criar um dicionário em Python, você pode inicializar todos os pares chave-valor de uma vez ou começar com um dicionário vazio, adicionando os pares posteriormente.

>>> dict1 = {'linguagem':'Python','gosto':True}
>>> type(dict1)
<class 'dict'>

# Ou, podemos fazer o seguinte:

>>> dict1 = {}
>>> dict1['linguagem']='Python'
>>> dict1['gosto']=True

Métodos de Dicionários Python para Operações Usuais

Observação: Para acompanhar os exemplos práticos, você deve ter o Python 3.7 ou uma versão mais recente instalada em seu ambiente.

Você pode testar o código em um ambiente Python REPL ou usar um editor Python online como o oferecido pelo etechpt.com.

>>> pessoa = {'nome':'Alice',
...           'cidade':'Portland',
...           'interesse':'Programação',
...           'profissão':'Desenvolvedora'
...           }

Agora que já temos um dicionário Python inicializado, vamos explorar os diversos métodos disponíveis.

Acessando as Chaves do Dicionário com keys()

Uma das operações mais comuns ao trabalhar com dicionários Python é a necessidade de acessar todas as chaves, valores ou pares chave-valor. Para obter as chaves de um dicionário, utilize o método keys() conforme demonstrado abaixo:

>>> pessoa.keys()
dict_keys(['nome', 'cidade', 'interesse', 'profissão'])

Obtendo os Valores do Dicionário com values()

O método values() retorna todos os valores contidos no dicionário, o que é muito útil quando se deseja processar esses valores de alguma forma.

Vamos acessar todos os valores no dicionário ‘pessoa’:

>>> pessoa.values()
dict_values(['Alice', 'Portland', 'Programação', 'Desenvolvedora'])

Recuperando Pares Chave-Valor com items()

O método items() retorna uma lista de tuplas, cada uma contendo um par chave-valor. Aplicando esse método ao dicionário ‘pessoa’, obtemos uma lista de tuplas com os pares chave-valor:

>>> pessoa.items()
dict_items([('nome', 'Alice'), ('cidade', 'Portland'), ('interesse', 'Programação'),
           ('profissão', 'Desenvolvedora')])

Criando uma Cópia Superficial com copy()

O método copy() cria e retorna uma cópia superficial de um dicionário Python.

>>> pessoa_copia = pessoa.copy()

Neste exemplo, ‘pessoa_copia’ é uma cópia superficial do dicionário ‘pessoa’. Vamos modificar esta cópia, atualizando o valor da chave ‘nome’ para ‘Bob’.

>>> pessoa_copia['nome'] = 'Bob'
>>> pessoa_copia

Ao examinar o conteúdo da cópia, notamos que o valor de ‘nome’ foi atualizado para ‘Bob’.

{
 'nome': 'Bob',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora'
}

No entanto, o dicionário original ‘pessoa’ permanece inalterado.

>>> pessoa
{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora'
}

Definindo Valores Padrão com setdefault()

Ao trabalhar com dicionários em Python, é comum se deparar com a exceção KeyError quando se tenta acessar uma chave que não existe. Por exemplo, ao tentar acessar a chave ‘idade’:

>>> pessoa['idade']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'idade'

Para evitar esses erros, use os métodos integrados setdefault() e get() ao invés de tentar acessar o valor diretamente como no exemplo acima.

O método setdefault(key) retorna dict[‘key’] se a chave estiver presente no dicionário.

>>> pessoa.setdefault('nome')
'Alice'

Caso a chave não exista, o método a adiciona ao dicionário com o valor padrão ‘None’.

>>> pessoa.setdefault('endereço')
>>> pessoa

Aqui, a chave ‘endereço’ não existia no dicionário ‘pessoa’. Notamos que ela foi adicionada com o valor padrão ‘None’.

{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': None
}

Agora, vamos definir um valor para a chave ‘endereço’:

>>> pessoa['endereço'] = "10, rua xyz"
>>> pessoa
{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': '10, rua xyz'
}

Você também pode especificar um valor diretamente na chamada do método, conforme mostrado abaixo:

>>> pessoa.setdefault('país','EUA')
'EUA'
>>> pessoa

Como a chave ‘país’ não existia no dicionário ‘pessoa’, ela foi adicionada com o valor ‘EUA’.

{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': '10, rua xyz',
 'país': 'EUA'
}

Acessando um Valor Específico com get()

O método get() retorna o valor correspondente à chave especificada. Ele também aceita um segundo argumento opcional que será retornado caso a chave não seja encontrada no dicionário.

Ao tentar acessar o valor da chave ‘nome’, obtemos ‘Alice’, pois ela está presente no dicionário:

>>> pessoa.get('nome')
'Alice'

O dicionário ‘pessoa’ não possui a chave ‘nota’. Ao tentarmos obter seu valor, não obtemos nada diretamente no REPL do Python. No entanto, ao imprimir esse valor, veremos ‘None’.

>>> pessoa.get('nota')
>>> print(pessoa.get('nota'))
None

Mas, se fornecermos um valor padrão opcional, esse valor será retornado no lugar de ‘None’.

>>> pessoa.get('nota','não encontrado')
'não encontrado'

É importante notar que o método get() não adiciona a chave ‘nota’ ao dicionário.

>>> pessoa
{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': '10, rua xyz',
 'país': 'EUA'
}

Compreendendo as Diferenças entre setdefault() e get()

Ambos os métodos, setdefault() e get(), podem ser usados para lidar com a exceção KeyError. Vamos resumir as diferenças que aprendemos:

  • dict.setdefault(key,val) adiciona a chave com ‘val’ como valor padrão. Se ‘val’ não for especificado, a chave será adicionada com o valor padrão ‘None’.
  • dict.get(key,val) retorna o valor associado à chave no dicionário Python. Se a chave não estiver presente, o método retorna ‘val’ (se fornecido) ou ‘None’, sem adicionar a chave ao dicionário.

Você também pode usar defaultdict em Python para um tratamento mais sofisticado de KeyErrors.

Atualizando o Conteúdo do Dicionário com update()

Você pode atualizar um dicionário Python existente usando pares chave-valor de outro dicionário. O método update() permite atualizar um dicionário usando o conteúdo de qualquer iterável Python.

Vamos definir um dicionário ‘mais_detalhes’ e atualizar o dicionário ‘pessoa’ com o conteúdo dele:

>>> mais_detalhes = {'hobby':'cantar', 'gosta':'doces'}
>>> pessoa.update(mais_detalhes)

Na saída abaixo, notamos que as chaves ‘hobby’ e ‘gosta’ foram adicionadas ao dicionário ‘pessoa’.

>>> pessoa
{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': '10, rua xyz',
 'país': 'EUA',
 'hobby': 'cantar',
 'gosta': 'doces'
}

Removendo o Último Item Adicionado com popitem()

O método popitem() remove o último par chave-valor adicionado a um dicionário.

>>> pessoa.popitem()
('gosta', 'doces')

Como visto, ao chamar popitem() no dicionário ‘pessoa’, obtemos o par (‘gosta’, ‘doces’), que era o último item adicionado.

O método também remove o par chave-valor do dicionário, o que pode ser confirmado examinando seu conteúdo:

>>> pessoa
{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': '10, rua xyz',
 'país': 'EUA',
 'hobby': 'cantar'
}

Removendo um Item do Dicionário com pop()

Já sabemos que o método popitem() remove e retorna o último par chave-valor de um dicionário. Mas, em alguns casos, podemos precisar remover itens diferentes do último adicionado.

Para isso, podemos usar o método pop(key), que retorna o valor correspondente à chave especificada, removendo também o par chave-valor do dicionário.

Aqui está um exemplo:

>>> pessoa.pop('hobby')
'cantar'

Ao acessarmos o item correspondente à chave ‘hobby’, notamos que ele não está mais presente no dicionário.

>>> pessoa
{
 'nome': 'Alice',
 'cidade': 'Portland',
 'interesse': 'Programação',
 'profissão': 'Desenvolvedora',
 'endereço': '10, rua xyz',
 'país': 'EUA'
}

Se passarmos uma chave inexistente, ocorrerá um erro KeyError:

>>> pessoa.pop('idade')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'idade'

Neste caso, ocorre um KeyError porque a chave ‘idade’ não está presente no dicionário ‘pessoa’.

Ao contrário do método pop() de listas, que remove o último item por padrão, o método pop() de dicionários exige que uma chave seja especificada. Se você não fornecer a chave, ocorrerá um erro.

>>> pessoa.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 argument, got 0

Excluindo Todos os Itens do Dicionário com clear()

Os métodos pop() e popitem() removem um par chave-valor por vez. Se você deseja remover todos os itens de um dicionário, pode utilizar o método clear().

>>> pessoa.clear()
>>> pessoa
{}

Como visto, chamar clear() remove todos os pares chave-valor do dicionário ‘pessoa’, tornando-o vazio.

Resumo dos Métodos de Dicionários Python

Aqui está um resumo dos métodos de dicionários Python que aprendemos.

Método Sintaxe Descrição
keys() dict1.keys() Retorna as chaves de dict1
values() dict1.values() Retorna os valores de dict1
items() dict1.items() Retorna uma lista de todos os pares chave-valor em dict1
copy() dict1.copy() Retorna uma cópia superficial de dict1
setdefault() dict1.setdefault(key, default_value) – Adiciona a chave com default_value como valor (se não for especificado, o valor padrão é None)
– Retorna dict1[key] se a chave já existir
get() dict1.get(key,default_value) – Retorna dict1[key] se a chave existir em dict1; caso contrário, retorna default_value
– Se a chave não estiver presente em dict1 e default_value não for especificado, retorna None
update() dict1.update(iterable1) Atualiza dict1 com pares chave-valor de iterable1
popitem() dict1.popitem() Remove e retorna o último par chave-valor de dict1
pop() dict1.pop(key) – Remove e retorna o valor correspondente à chave: dict1[key]
– Gera um KeyError se a chave não existir em dict1
clear() dict1.clear() Exclui todos os itens de dict1

Conclusão

Você aprendeu como utilizar os métodos comuns para realizar operações de leitura, atualização e exclusão em dicionários Python. Também viu como get() e setdefault() podem ser usados para lidar com exceções KeyError, retornando um valor padrão ou adicionando uma entrada ao dicionário, respectivamente. Lembre-se que é possível ordenar dicionários Python por chave ou valor.

Em seguida, confira a lista de métodos úteis para listas em Python. Bons estudos e boa codificação!