Como Verificar se as Chaves de um Dicionário Estão Ordenadas em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se as chaves de um dicionário estão ordenadas em Python. O laboratório se concentra no uso da função sorted() em combinação com o método keys() para iterar através de um dicionário e acessar suas chaves em ordem ordenada.

Você começará criando um dicionário e, em seguida, usando my_dict.keys() para obter um objeto de visualização (view object) contendo as chaves. Este objeto de visualização é então passado para a função sorted(), que retorna uma lista das chaves ordenadas alfabeticamente. Finalmente, você iterará pelas chaves ordenadas e imprimirá cada chave junto com seu valor correspondente do dicionário, demonstrando como processar as chaves do dicionário em uma ordem específica.

Aprenda Sobre Chaves Ordenadas

Nesta etapa, você aprenderá como iterar através de um dicionário em Python, focando especificamente no acesso às chaves em ordem ordenada. Dicionários em Python são inerentemente desordenados, o que significa que a ordem em que você adiciona itens não é necessariamente a ordem em que eles são armazenados. No entanto, existem situações em que você precisa processar as chaves do dicionário em uma ordem específica, como alfabeticamente ou numericamente.

Para conseguir isso, você pode usar a função sorted() em combinação com o método keys() de um dicionário. O método keys() retorna um objeto de visualização (view object) que exibe uma lista de todas as chaves no dicionário. A função sorted() então pega esta lista de chaves e retorna uma nova lista com as chaves ordenadas em ordem crescente.

Vamos começar com um exemplo simples. Primeiro, crie um arquivo Python chamado sort_keys.py no seu diretório ~/project usando o editor VS Code.

## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}

## Get the keys and sort them
sorted_keys = sorted(my_dict.keys())

## Print the sorted keys
print(sorted_keys)

## Iterate through the dictionary using the sorted keys
for key in sorted_keys:
    print(f"Key: {key}, Value: {my_dict[key]}")

Neste código:

  • Criamos um dicionário chamado my_dict com três pares chave-valor. Observe que as chaves não estão em ordem alfabética.
  • Usamos my_dict.keys() para obter um objeto de visualização contendo as chaves do dicionário.
  • Passamos este objeto de visualização para a função sorted(), que retorna uma lista das chaves ordenadas alfabeticamente.
  • Em seguida, iteramos através da lista sorted_keys e imprimimos cada chave junto com seu valor correspondente do dicionário.

Para executar este script, abra seu terminal no VS Code e execute o seguinte comando:

python sort_keys.py

Você deve ver a seguinte saída:

['a', 'b', 'c']
Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3

Como você pode ver, as chaves agora são processadas em ordem alfabética. Essa abordagem é útil quando você precisa apresentar ou processar dados do dicionário de maneira consistente e previsível.

Compare keys() com sorted()

Na etapa anterior, você aprendeu como usar a função sorted() com o método keys() para iterar através de um dicionário em ordem ordenada. Nesta etapa, vamos nos aprofundar nas diferenças entre usar keys() diretamente e usar sorted() com keys(). Entender essas diferenças é crucial para escrever código Python eficiente e legível.

O método keys() retorna um objeto de visualização (view object), que é uma visualização dinâmica das chaves do dicionário. Isso significa que, se o dicionário mudar, o objeto de visualização reflete essas mudanças. No entanto, o objeto de visualização em si não é uma lista e não suporta a ordenação diretamente.

Por outro lado, a função sorted() retorna uma nova lista contendo todos os itens do iterável em ordem crescente. Quando você usa sorted(my_dict.keys()), você está criando uma nova lista ordenada das chaves do dicionário, deixando o dicionário original e seu objeto de visualização inalterados.

Vamos ilustrar isso com um exemplo. Abra o arquivo sort_keys.py no seu diretório ~/project usando o editor VS Code e modifique-o da seguinte forma:

## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}

## Get the keys view object
keys_view = my_dict.keys()

## Print the keys view object
print("Keys view object:", keys_view)

## Print the sorted keys
sorted_keys = sorted(my_dict.keys())
print("Sorted keys:", sorted_keys)

## Modify the dictionary
my_dict["d"] = 4

## Print the keys view object again
print("Keys view object after modification:", keys_view)

## Iterate through the dictionary using the sorted keys
for key in sorted_keys:
    print(f"Key: {key}, Value: {my_dict[key]}")

Neste código:

  • Criamos um dicionário chamado my_dict.
  • Obtemos o objeto de visualização das chaves usando my_dict.keys() e o armazenamos na variável keys_view.
  • Imprimimos o objeto keys_view e a lista sorted_keys.
  • Em seguida, modificamos o dicionário adicionando um novo par chave-valor.
  • Imprimimos o objeto keys_view novamente para mostrar que ele reflete as mudanças no dicionário.
  • Finalmente, iteramos através da lista sorted_keys e imprimimos os pares chave-valor. Observe que a lista sorted_keys permanece inalterada e não reflete a adição da chave "d".

Agora, execute o script usando o seguinte comando:

python sort_keys.py

Você deve ver a seguinte saída:

Keys view object: dict_keys(['b', 'a', 'c'])
Sorted keys: ['a', 'b', 'c']
Keys view object after modification: dict_keys(['b', 'a', 'c', 'd'])
Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3

Observe que:

  • O objeto keys_view é uma visualização dinâmica das chaves do dicionário. Quando modificamos o dicionário, o objeto keys_view reflete as mudanças.
  • A lista sorted_keys é uma lista estática contendo as chaves no momento em que foi criada. Ela não reflete as mudanças feitas no dicionário posteriormente.
  • O loop itera apenas pelas chaves que estavam presentes quando sorted_keys foi criado.

Este exemplo destaca a principal diferença entre keys() e sorted(). keys() fornece uma visualização dinâmica, enquanto sorted() cria uma lista ordenada estática. Escolha o método apropriado com base na necessidade de refletir as mudanças no dicionário ou trabalhar com um conjunto fixo de chaves ordenadas.

Verifique a Ordem com Comparação de Listas

Nesta etapa, você aprenderá como verificar a ordem das chaves em um dicionário usando a comparação de listas. Isso é útil quando você precisa garantir que as chaves estejam em uma ordem específica, como alfabética ou numérica, para fins de teste ou validação.

Para verificar a ordem das chaves, você pode comparar a lista ordenada de chaves com uma lista predefinida que representa a ordem esperada. Se as duas listas forem idênticas, significa que as chaves estão na ordem desejada.

Vamos modificar o arquivo sort_keys.py no seu diretório ~/project usando o editor VS Code para incluir uma função que verifica a ordem das chaves:

## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}

def check_key_order(dictionary, expected_order):
    """
    Checks if the keys in the dictionary are in the expected order.
    """
    sorted_keys = sorted(dictionary.keys())
    return sorted_keys == expected_order

## Define the expected order
expected_order = ["a", "b", "c"]

## Check if the keys are in the expected order
is_correct_order = check_key_order(my_dict, expected_order)

## Print the result
print("Is the key order correct?", is_correct_order)

## Example with incorrect order
expected_order_incorrect = ["b", "a", "c"]
is_correct_order_incorrect = check_key_order(my_dict, expected_order_incorrect)
print("Is the key order correct (incorrect order)?", is_correct_order_incorrect)

Neste código:

  • Definimos uma função chamada check_key_order que recebe um dicionário e uma lista de ordem esperada como entrada.
  • Dentro da função, ordenamos as chaves do dicionário usando sorted(dictionary.keys()).
  • Comparamos a lista ordenada de chaves com a lista expected_order usando o operador ==.
  • A função retorna True se as duas listas forem idênticas e False caso contrário.
  • Em seguida, definimos uma lista expected_order com a ordem alfabética correta.
  • Chamamos a função check_key_order com o dicionário e a lista expected_order e imprimimos o resultado.
  • Também fornecemos um exemplo com uma ordem incorreta para demonstrar como a função funciona.

Agora, execute o script usando o seguinte comando:

python sort_keys.py

Você deve ver a seguinte saída:

Is the key order correct? True
Is the key order correct (incorrect order)? False

Esta saída confirma que a função check_key_order identifica corretamente se as chaves estão na ordem esperada. Essa técnica é valiosa para validar dados e garantir que seu código se comporte conforme o esperado ao lidar com dicionários com requisitos específicos de ordem de chaves.

Resumo

Neste laboratório, você aprendeu como iterar através de um dicionário Python e acessar suas chaves em ordem ordenada. Dicionários são inerentemente desordenados, mas usando o método keys() para recuperar um objeto de visualização (view object) das chaves do dicionário e, em seguida, aplicando a função sorted(), você pode obter uma lista de chaves ordenadas em ordem crescente.

Esta lista ordenada pode então ser usada para iterar através do dicionário, processando os pares chave-valor na ordem desejada. O código de exemplo demonstrou como criar um dicionário, ordenar suas chaves alfabeticamente e, em seguida, imprimir cada chave junto com seu valor correspondente, mostrando a aplicação prática da ordenação de chaves de dicionário.