Utilizando dicionários em Python: uma alternativa ao switch case.

Utilizando dicionários em Python: uma alternativa ao switch case.

September 29, 2022 | Dict

Em Python, um dicionário é uma coleção de pares chave-valor, onde cada chave é única e mapeia para um valor específico. É semelhante a uma tabela hash em outras linguagens de programação.

Uma vantagem de se utilizar dicionários em Python é que eles permitem a busca e acesso aos valores armazenados de forma rápida e eficiente, em comparação com o uso de estruturas de controle como o switch case.

Para ilustrar essa ideia, vamos supor que temos uma função que recebe como parâmetro uma string contendo um nome de um mês, e precisamos retornar o número correspondente a esse mês. Em outras linguagens, poderíamos utilizar um switch case para resolver esse problema. Em Python, uma abordagem mais simples e elegante seria utilizar um dicionário:

def obter_numero_do_mes(mes):
    numeros = {
        'janeiro': 1,
        'fevereiro': 2,
        'março': 3,
        'abril': 4,
        'maio': 5,
        'junho': 6,
        'julho': 7,
        'agosto': 8,
        'setembro': 9,
        'outubro': 10,
        'novembro': 11,
        'dezembro': 12
    }
    return numeros.get(mes.lower(), -1)

Nesse exemplo, definimos um dicionário chamado numeros, onde cada chave é um nome de mês e o valor correspondente é o número desse mês. Em seguida, utilizamos o método get() do dicionário para obter o valor correspondente à chave passada como parâmetro. O segundo parâmetro do método get() é opcional e é o valor a ser retornado caso a chave não exista no dicionário. No nosso caso, se o valor da chave mes não existir no dicionário, retornamos -1.

O Python também introduziu recentemente uma nova estrutura de controle chamada match case, que é semelhante ao switch case, mas mais expressiva e flexível. A partir da versão 3.10 do Python, podemos utilizar o match case para substituir o dicionário do exemplo anterior:

def obter_numero_do_mes(mes):
    return match(mes.lower()):
        case 'janeiro':
            return 1
        case 'fevereiro':
            return 2
        case 'março':
            return 3
        case 'abril':
            return 4
        case 'maio':
            return 5
        case 'junho':
            return 6
        case 'julho':
            return 7
        case 'agosto':
            return 8
        case 'setembro':
            return 9
        case 'outubro':
            return 10
        case 'novembro':
            return 11
        case 'dezembro':
            return 12
        case _:
            return -1

Nesse exemplo, utilizamos a estrutura match case para realizar a mesma tarefa que o dicionário. O valor da variável mes é comparado com cada um dos padrões definidos nos casos, e a ação correspondente é executada quando um padrão corresponde. O caso _ é um caso padrão, que é executado quando nenhum dos outros casos é correspondido. Note que, ao contrário do dicionário, o match case suporta apenas valores simples como padrões (por exemplo, inteiros, strings, etc.) e não suporta operadores complexos ou funções de comparação personalizadas.

Em resumo, o dicionário é uma estrutura de dados poderosa em Python que permite mapear chaves para valores e é uma alternativa mais eficiente e legível ao switch case em muitos casos. O match case é uma nova funcionalidade em Python 3.10 que oferece recursos semelhantes ao switch case, mas ainda não está disponível em versões anteriores.