Dicionários (Dictionaries)¶

A imagem abaixo mostra uma função de mapeamento de dígitos romanos para os correspondentes valores decimais:

dicionário

Ela exemplifica a estrutura de dados conhecida como Dicionário (ou Mapeamento), que corresponde a uma função de mapeamento dentre dois domínios distintos. Neste exemplo, o dicionário mapeia os dígitos que compõem números romanos (as chaves do dicionário) para os correspondentes valores decimais.

Um Dicionário pode ser visto como um conjunto de duplas (pares ordenados): {(M→1000), (D→500), (C→100), (L→50), (X→10), (V→5), (I→1)}. A ordem das chaves no dicionário depende da versão de Python: a partir da versão 3.7 a ordem das chaves é garantida e segue a ordem de inserção, enquanto que nas versões anteriores não há nenhuma garantia de ordem. Diferente do que ocorre em coleções como listas e tuplas nas quais indexação de elementos é apenas possível via seus correspondentes índices, em dicionários as próprias chaves podem ser utilizadas para obter (mapear) os valores a elas associados, como exemplificado abaixo.

In [ ]:
# Criar um dicionário
valores_romanos = {'M':1000,'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
In [ ]:
# Obter o valor associado a uma chave particular (ex: o valor do dígito romano 'C')
valores_romanos['C']
In [ ]:
# Verificar se uma determinada chave está presente no dicionário (operador "in")
'Z' in valores_romanos
In [ ]:
# Verificar se uma determinada chave está ausente (NÃO está presente) no dicionário
'Z' not in valores_romanos
In [ ]:
# Obter o número de pares do dicionário
len(valores_romanos)

Estoque de produtos¶

Um dicionário que mapeia produtos para a quantidade disponíveis em estoque

In [ ]:
produtos = {'martelo':5, 'machado':3, 'picareta':7, 'formão': 2}
In [ ]:
# Registrar a venda de duas picaretas
produtos['picareta'] = produtos['picareta'] - 2
print(produtos)
In [ ]:
# A operação acima também pode ser escrita utilizando o operador -=
produtos['picareta'] -= 2
print(produtos)
In [ ]:
# Registrar a devolução de um martelo
produtos['martelo'] += 1
print(produtos)
In [ ]:
# Registrar a entrega de 5 unidades de um novo produto (alicate) pelo fornecedor
produtos['alicate'] = 5
print(produtos)

Alguns métodos sobre Dicionários¶

Abaixo estão alguns métodos disponíveis para dicionários:

In [ ]:
# Para o dicionário utilizado acima para controle de estoque de produtos,
# a obtenção da quantidade em estoque de um produto pode ser feito por:

num_martelos = produtos['serrote']
# Gera uma exceção do tipo "KeyError" caso o produto não seja uma das chaves do dicionário
# Para evitar a ocorrência da exceção, é necessário verificar antes se há o produto no estoque
if 'serrote' in produtos:
    print(produtos['serrote'])

num_martelos = produtos.get('serrote')
# Retorna None caso o produto não seja uma das chaves do dicionário 

num_martelos = produtos.get('serrote', 0)
# Retorna 0 (zero) caso o produto não seja uma das chaves do dicionário 
In [ ]:
# Criar um dicionário que mapeia o CPF para a o nome das correspondentes pessoas
cpfs = {'923.457.329-32':'Huguinho', '223.487.325-92':'Zezinho', '713.487.815-95':'Luizinho'}
In [ ]:
# Obter os CPFs (as chaves do dicionário) 
cpfs.keys()
In [ ]:
# Obter os nomes das pessoas (os valores do dicionário) 
cpfs.values()
In [ ]:
# Obter os mapeamentos (duplas) na forma de tuplas
cpfs.items()
In [ ]:
# Fazer uma cópia de um dicionário
copia_cpfs = cpfs.copy()
In [ ]:
# Remover um par do dicionário
copia_cpfs.pop('223.487.325-92')
print(cpfs)
print(copia_cpfs)

Iterando sobre dados de dicionários¶

In [ ]:
# Iterar sobre os cpfs (chaves do dicionário)
for cpf in cpfs.keys():
    print(cpf)
In [ ]:
# Iterar sobre os nomes (valores do dicionário)
for nome in cpfs.values():
    print(nome)
In [ ]:
# Iterar sobre os pares de valores (cpf: nome)
for cpf,nome in cpfs.items():
    print(cpf, nome)

Contando a ocorrência de letras num frase¶

In [ ]:
frase = input()
contador = dict()
for letra in frase.lower():
    if letra.isalpha():
        contador[letra] = contador.get(letra, 0) + 1
print(contador)

# Obtendo a maior quantidade de letras que se repete
maior_qtd = max(contador.values())

# Obtendo a(s) letra(s) que mais se repete(m)
for letra, qtd in contador.items():
    if qtd == maior_qtd:
        print(f"Letra com {maior_qtd} ocorrências: {letra}")
        
# Se estiver interessado apenas numa das letras que mais se repetem,
# pode ser utilizada a função MAX, conforme exemplificado abaixo
letra_mais_ocorre = max(contador, key = contador.get)
print(f"Letra que mais ocorre = {letra_mais_ocorre}")

Alternativamente, pode ser utilizado a classe "Counter" do módulo "Collections"