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.