Pular para o conteúdo

Dicionário

Definição

Os dicionários são coleções de elementos não ordenados, mutáveis e indexados. Não é possível ter elementos duplicados em um dicionário e cada elemento do dicionário é composto por uma chave e um valor.

  • Chave – indexa (posiciona) o elemento no dicionário;
  • Valor – pode ser um número, uma string, uma lista, uma tupla, um outro dicionário, etc.

A sintaxe básica usada para definir um elemento do dicionário é { ‘chave’ : ‘valor’ }.

Exemplos

Considere a seguinte definição de um dicionário em Python:

aluno = {
      "nome" : "Maria Flor",
      "matrícula" : 12345,
      "telefone" : 999999,
      "disciplinas" : ["DPW", "OC", "TP1"],
      "características" : {"sexo": "F", "idade": 19}
}

Para ver todos os valores armazenados no dicionário, basta usar

for x in aluno:
    print(aluno[x])

O Python gera então a seguinte resposta:

Maria Flor
12345
999999
['DPW', 'OC', 'TP1']
{'sexo': 'F', 'idade': 19}

O programa abaixo verifica o número de itens do dicionário “aluno” e lista todas as chaves com os seus respectivos valores.

print("Número de itens =", len(aluno))
for x, y in aluno.items():
    print(x, ":", y)

A resposta é

Número de itens = 5
nome : Maria Flor
matrícula : 12345
telefone : 999999
disciplinas : ['DPW', 'OC', 'TP1']
características : {'sexo': 'F', 'idade': 19}

É possível ver apenas alguns elementos do dicionário. No exemplo abaixo, queremos ver o nome, as disciplinas e o sexo do aluno.

print(aluno["nome"])
print(aluno["disciplinas"])
print(aluno["características"]["sexo"])

Abaixo a resposta gerada pelo programa.

Maria Flor
['DPW', 'OC', 'TP1']
F

Considere agora o dicionário “alunos” com duas chaves: “aluno1” e “aluno2”.

alunos = {
    "aluno1" : {
      "nome" : "Maria Flor",
      "matrícula" : 12345,
      "telefone" : 999999,
      "disciplinas" : ["DPW", "OC", "TP1"],
      "características" : {"sexo": "F", "idade": 19}
    },
    "aluno2" : {
      "nome" : "João Pedro",
      "matrícula" : 67890,
      "telefone" : 888888,
      "disciplinas" : ["LOG", "SO", "TP2"],
      "características" : {"sexo": "M", "idade": 20}
    }    
}

A forma de se extrair os valores do dicionário é semelhante ao que já foi visto acima.

print(alunos["aluno1"]["nome"])
print(alunos["aluno1"]["disciplinas"])
print(alunos["aluno2"]["matrícula"])
print(alunos["aluno2"]["características"]["idade"])

A resposta mostrada pelo Python é:

Maria Flor
['DPW', 'OC', 'TP1']
67890
20

Métodos

  • O método clear() remove todos os elementos de um dicionário. O exemplo abaixo usa o método com o dicionário “aluno” definido na seção anterior.
print("Número de itens =", len(aluno))
print("Usa o método clear()")
aluno.clear()
print("Número de itens =", len(aluno))

A resposta mostrada pelo programa:

Número de itens = 5
Usa o método clear()
Número de itens = 0
  • O método copy() cria um novo dicionário que possui os mesmos valores do original. São dois objetos diferentes com id diferentes. Por outro lado, o uso do atributo = apenas dar um segundo nome para o dicionário original.
x = aluno.copy()
y = aluno
print(id(aluno), aluno, "\n")
print(id(x), x, "\n")
print(id(y), y)

A resposta abaixo mostra que os dicionários “aluno e “y” são dois nomes para um mesmo dicionário e que o dicionário “x” possui um id diferente.

140429077904896 {'nome': 'Maria Flor', 'matrícula': 12345, 'telefone': 999999, 'disciplinas': ['DPW', 'OC', 'TP1'], 'características': {'sexo': 'F', 'idade': 19}}

140429077905280 {'nome': 'Maria Flor', 'matrícula': 12345, 'telefone': 999999, 'disciplinas': ['DPW', 'OC', 'TP1'], 'características': {'sexo': 'F', 'idade': 19}}

140429077904896 {'nome': 'Maria Flor', 'matrícula': 12345, 'telefone': 999999, 'disciplinas': ['DPW', 'OC', 'TP1'], 'características': {'sexo': 'F', 'idade': 19}}

O próximo exemplo altera elementos dos três dicionários para ver o que acontece.

aluno["nome"] = "Maria Tereza"
x["matrícula"] = 202201210
y["telefone"] = 5555555
print(aluno, "\n")
print(x, "\n")
print(y)

A resposta, como esperada, mostra que os dicionários “alunos” e “y” mantêm os mesmos valores para as chaves.

{'nome': 'Maria Tereza', 'matrícula': 12345, 'telefone': 5555555, 'disciplinas': ['DPW', 'OC', 'TP1'], 'características': {'sexo': 'F', 'idade': 19}} 

{'nome': 'Maria Flor', 'matrícula': 202201210, 'telefone': 999999, 'disciplinas': ['DPW', 'OC', 'TP1'], 'características': {'sexo': 'F', 'idade': 19}} 

{'nome': 'Maria Tereza', 'matrícula': 12345, 'telefone': 5555555, 'disciplinas': ['DPW', 'OC', 'TP1'], 'características': {'sexo': 'F', 'idade': 19}}
  • O método fromkeys() pode ser usado para criar um dicionário onde todas as chaves têm o mesmo valor. Neste caso, deve-se usar o construtor dict().
chaves = ('nome', 'matrícula', 'telefone')
dicionario1 = dict.fromkeys(chaves)
print(dicionario1)
print()
chaves = ('nome', 'matrícula', 'telefone')
dicionario2 = dict.fromkeys(chaves, 100)
print(dicionario2)

Note que nenhum valor foi informado para o “dicionario1”, enquanto o valor 100 foi informado para todos os elementos do dicionario2. A resposta do programa é mostrada abaixo.

{'nome': None, 'matrícula': None, 'telefone': None}

{'nome': 100, 'matrícula': 100, 'telefone': 100}
  • O método get() é uma outra forma usada para obter o valor de uma chave.
print("nome =",  aluno.get("nome"))
print("nome =",  aluno["nome"])

A resposta é

nome = Maria Flor
nome = Maria Flor
  • O método items() retorna os elementos (chave e valor) do dicionário. O exemplo abaixo usa o dicionário “aluno”.
for x in aluno.items():
    print(x)

A resposta do programa é mostrada abaixo.

('nome', 'Maria Flor')
('matrícula', 12345)
('telefone', 999999)
('disciplinas', ['DPW', 'OC', 'TP1'])
('características', {'sexo': 'F', 'idade': 19})
  • O método keys() retorna uma lista com as chaves do dicionário. Por exemplo,
print(aluno.keys())

Responde com

dict_keys(['nome', 'matrícula', 'telefone', 'disciplinas', 'características'])
  • O método pop() remove o elemento com a chave especificada. Pra remover o elemento com chave “telefone” do dicionário “aluno”, basta escrever
aluno.pop("telefone")
print(aluno.keys())

A resposta obtida é

dict_keys(['nome', 'matrícula', 'disciplinas', 'características'])
  • O método popitem() remove o último elemento do dicionário. Usando o dicionário “aluno” como exemplo,
aluno.popitem()
print(aluno.keys())

Temos como resposta:

dict_keys(['nome', 'matrícula', 'telefone', 'disciplinas'])
  • O método setdefault() permite definir um valor para um chave que não existe no dicionário. No exemplo a seguir, temos a consulta a duas chaves do dicionário “aluno”: a primeira (“nome”) existe, enquanto a segunda (“CRA”) não existe. Define-se como padrão o valor “inexistente” para uma chave não encontrada no dicionário.
print("nome =", aluno.setdefault("nome", "inexistente"))
print("CRA =",  aluno.setdefault("CRA", "inexistente"))

A resposta encontrada corresponde a

nome = Maria Flor
CRA = inexistente
  • O método update() pode ser utilizado para atualizar os elementos de um dicionário. O exemplo abaixo faz a alteração do valor da chave “matrícula” usando um outro dicionário e depois faz a inclusão de uma nova chave (“sexo”) e o seu valor no “Dicionario1”.
Dicionario1 = {
      "nome" : "Maria Flor",
      "matrícula" : 12345
}
Dicionario2 = {
      "matrícula" : 67890
}

Dicionario1.update(Dicionario2)
Dicionario1.update(sexo = "F")
print(Dicionario1)

O “Dicionario1” passa a ter os seguintes elementos:

{'nome': 'Maria Flor', 'matrícula': 67890, 'sexo': 'F'}
  • O método values() retorna todos os valores dos elementos do dicionário. Considerando o dicionário “aluno” dos exemplos acima, podemos pedir
print(aluno.values())

A resposta é

dict_values(['Maria Flor', 12345, 999999, ['DPW', 'OC', 'TP1'], {'sexo': 'F', 'idade': 19}])