Comparar keys() con sorted()
En el paso anterior, aprendiste cómo usar la función sorted()
con el método keys()
para iterar a través de un diccionario en orden ordenado. En este paso, profundizaremos en las diferencias entre usar keys()
directamente y usar sorted()
con keys()
. Comprender estas diferencias es crucial para escribir código Python eficiente y legible.
El método keys()
devuelve un objeto de vista, que es una vista dinámica de las claves del diccionario. Esto significa que si el diccionario cambia, el objeto de vista refleja esos cambios. Sin embargo, el objeto de vista en sí no es una lista y no admite la ordenación directamente.
Por otro lado, la función sorted()
devuelve una nueva lista que contiene todos los elementos del iterable en orden ascendente. Cuando usas sorted(my_dict.keys())
, estás creando una nueva lista ordenada de las claves del diccionario, dejando el diccionario original y su objeto de vista sin cambios.
Illustremos esto con un ejemplo. Abre el archivo sort_keys.py
en tu directorio ~/project
utilizando el editor VS Code y modifícalo de la siguiente manera:
## 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]}")
En este código:
- Creamos un diccionario llamado
my_dict
.
- Obtenemos el objeto de vista de las claves usando
my_dict.keys()
y lo almacenamos en la variable keys_view
.
- Imprimimos el objeto
keys_view
y la lista sorted_keys
.
- Luego modificamos el diccionario agregando un nuevo par clave-valor.
- Imprimimos el objeto
keys_view
nuevamente para mostrar que refleja los cambios en el diccionario.
- Finalmente, iteramos a través de la lista
sorted_keys
e imprimimos los pares clave-valor. Ten en cuenta que la lista sorted_keys
permanece sin cambios y no refleja la adición de la clave "d"
.
Ahora, ejecuta el script usando el siguiente comando:
python sort_keys.py
Deberías ver la siguiente salida:
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
Observa que:
- El objeto
keys_view
es una vista dinámica de las claves del diccionario. Cuando modificamos el diccionario, el objeto keys_view
refleja los cambios.
- La lista
sorted_keys
es una lista estática que contiene las claves en el momento en que se creó. No refleja los cambios realizados al diccionario posteriormente.
- El bucle solo itera a través de las claves que estaban presentes cuando se creó
sorted_keys
.
Este ejemplo destaca la diferencia clave entre keys()
y sorted()
. keys()
proporciona una vista dinámica, mientras que sorted()
crea una lista ordenada estática. Elige el método adecuado según si necesitas reflejar cambios en el diccionario o trabajar con un conjunto fijo de claves ordenadas.